webcodecs-utils 0.1.2 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs ADDED
@@ -0,0 +1,375 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const Fn=require("lamejs"),zi=require("mp4box");function Jn(e,t,i=30,n="good"){const d=e*t,o={low:.05,good:.08,high:.1,"very-high":.15},u=o[n]||o.good;return d*i*u}function En(e,t,i,n){const d=[{maxMacroblocks:99,maxBitrate:64e3,level:10},{maxMacroblocks:396,maxBitrate:192e3,level:11},{maxMacroblocks:396,maxBitrate:384e3,level:12},{maxMacroblocks:396,maxBitrate:768e3,level:13},{maxMacroblocks:396,maxBitrate:2e6,level:20},{maxMacroblocks:792,maxBitrate:4e6,level:21},{maxMacroblocks:1620,maxBitrate:4e6,level:22},{maxMacroblocks:1620,maxBitrate:1e7,level:30},{maxMacroblocks:3600,maxBitrate:14e6,level:31},{maxMacroblocks:5120,maxBitrate:2e7,level:32},{maxMacroblocks:8192,maxBitrate:2e7,level:40},{maxMacroblocks:8192,maxBitrate:5e7,level:41},{maxMacroblocks:8704,maxBitrate:5e7,level:42},{maxMacroblocks:22080,maxBitrate:135e6,level:50},{maxMacroblocks:36864,maxBitrate:24e7,level:51},{maxMacroblocks:36864,maxBitrate:24e7,level:52},{maxMacroblocks:139264,maxBitrate:24e7,level:60},{maxMacroblocks:139264,maxBitrate:48e7,level:61},{maxMacroblocks:139264,maxBitrate:8e8,level:62}],o=[{maxPictureSize:36864,maxBitrate:128e3,tier:"L",level:30},{maxPictureSize:122880,maxBitrate:15e5,tier:"L",level:60},{maxPictureSize:245760,maxBitrate:3e6,tier:"L",level:63},{maxPictureSize:552960,maxBitrate:6e6,tier:"L",level:90},{maxPictureSize:983040,maxBitrate:1e7,tier:"L",level:93},{maxPictureSize:2228224,maxBitrate:12e6,tier:"L",level:120},{maxPictureSize:2228224,maxBitrate:3e7,tier:"H",level:120},{maxPictureSize:2228224,maxBitrate:2e7,tier:"L",level:123},{maxPictureSize:2228224,maxBitrate:5e7,tier:"H",level:123},{maxPictureSize:8912896,maxBitrate:25e6,tier:"L",level:150},{maxPictureSize:8912896,maxBitrate:1e8,tier:"H",level:150},{maxPictureSize:8912896,maxBitrate:4e7,tier:"L",level:153},{maxPictureSize:8912896,maxBitrate:16e7,tier:"H",level:153},{maxPictureSize:8912896,maxBitrate:6e7,tier:"L",level:156},{maxPictureSize:8912896,maxBitrate:24e7,tier:"H",level:156},{maxPictureSize:35651584,maxBitrate:6e7,tier:"L",level:180},{maxPictureSize:35651584,maxBitrate:24e7,tier:"H",level:180},{maxPictureSize:35651584,maxBitrate:12e7,tier:"L",level:183},{maxPictureSize:35651584,maxBitrate:48e7,tier:"H",level:183},{maxPictureSize:35651584,maxBitrate:24e7,tier:"L",level:186},{maxPictureSize:35651584,maxBitrate:8e8,tier:"H",level:186}],u=[{maxPictureSize:36864,maxBitrate:2e5,level:10},{maxPictureSize:73728,maxBitrate:8e5,level:11},{maxPictureSize:122880,maxBitrate:18e5,level:20},{maxPictureSize:245760,maxBitrate:36e5,level:21},{maxPictureSize:552960,maxBitrate:72e5,level:30},{maxPictureSize:983040,maxBitrate:12e6,level:31},{maxPictureSize:2228224,maxBitrate:18e6,level:40},{maxPictureSize:2228224,maxBitrate:3e7,level:41},{maxPictureSize:8912896,maxBitrate:6e7,level:50},{maxPictureSize:8912896,maxBitrate:12e7,level:51},{maxPictureSize:8912896,maxBitrate:18e7,level:52},{maxPictureSize:35651584,maxBitrate:18e7,level:60},{maxPictureSize:35651584,maxBitrate:24e7,level:61},{maxPictureSize:35651584,maxBitrate:48e7,level:62}],h=[{maxPictureSize:147456,maxBitrate:15e5,tier:"M",level:0},{maxPictureSize:278784,maxBitrate:3e6,tier:"M",level:1},{maxPictureSize:665856,maxBitrate:6e6,tier:"M",level:4},{maxPictureSize:1065024,maxBitrate:1e7,tier:"M",level:5},{maxPictureSize:2359296,maxBitrate:12e6,tier:"M",level:8},{maxPictureSize:2359296,maxBitrate:3e7,tier:"H",level:8},{maxPictureSize:2359296,maxBitrate:2e7,tier:"M",level:9},{maxPictureSize:2359296,maxBitrate:5e7,tier:"H",level:9},{maxPictureSize:8912896,maxBitrate:3e7,tier:"M",level:12},{maxPictureSize:8912896,maxBitrate:1e8,tier:"H",level:12},{maxPictureSize:8912896,maxBitrate:4e7,tier:"M",level:13},{maxPictureSize:8912896,maxBitrate:16e7,tier:"H",level:13},{maxPictureSize:8912896,maxBitrate:6e7,tier:"M",level:14},{maxPictureSize:8912896,maxBitrate:24e7,tier:"H",level:14},{maxPictureSize:35651584,maxBitrate:6e7,tier:"M",level:15},{maxPictureSize:35651584,maxBitrate:24e7,tier:"H",level:15},{maxPictureSize:35651584,maxBitrate:6e7,tier:"M",level:16},{maxPictureSize:35651584,maxBitrate:24e7,tier:"H",level:16},{maxPictureSize:35651584,maxBitrate:1e8,tier:"M",level:17},{maxPictureSize:35651584,maxBitrate:48e7,tier:"H",level:17},{maxPictureSize:35651584,maxBitrate:16e7,tier:"M",level:18},{maxPictureSize:35651584,maxBitrate:8e8,tier:"H",level:18},{maxPictureSize:35651584,maxBitrate:16e7,tier:"M",level:19},{maxPictureSize:35651584,maxBitrate:8e8,tier:"H",level:19}];function S(W){return W?W[W.length-1]:void 0}if(e==="avc"){const I=Math.ceil(t/16)*Math.ceil(i/16),Z=d.find(P=>I<=P.maxMacroblocks&&n<=P.maxBitrate)??S(d),j=Z?Z.level:0,w="64".padStart(2,"0"),A="00",J=j.toString(16).padStart(2,"0");return`avc1.${w}${A}${J}`}else if(e==="hevc"){const W="",Z="6",j=t*i,w=o.find(J=>j<=J.maxPictureSize&&n<=J.maxBitrate)??S(o);return`hev1.${W}1.${Z}.${w.tier}${w.level}.B0`}else{if(e==="vp8")return"vp8";if(e==="vp9"){const W="00",I=t*i,Z=u.find(w=>I<=w.maxPictureSize&&n<=w.maxBitrate)??S(u);return`vp09.${W}.${Z.level.toString().padStart(2,"0")}.08`}else if(e==="av1"){const I=t*i,Z=h.find(A=>I<=A.maxPictureSize&&n<=A.maxBitrate)??S(h);return`av01.0.${Z.level.toString().padStart(2,"0")}${Z.tier}.08`}}throw new TypeError(`Unhandled codec '${e}'.`)}class Nn{constructor(t,i={}){this.canvas=t,this.mode="webgpu",this.filterMode=i.filterMode||"linear",this.device=null,this.context=null,this.linearPipeline=null,this.bicubicPipeline=null,this.sampler=null,this.uniformBuffer=null,this.bitmapCtx=null}async init(){if(navigator.gpu)try{await this.initWebGPU(),this.mode="webgpu",console.log("GPUDrawImage: Using WebGPU (zero-copy)");return}catch(t){console.warn("GPUDrawImage: WebGPU initialization failed, falling back to ImageBitmap",t)}this.initBitmapRenderer(),this.mode="bitmap",console.log("GPUDrawImage: Using ImageBitmapRenderer (fallback)")}async initWebGPU(){const t=await navigator.gpu.requestAdapter();if(!t||(this.device=await t.requestDevice(),!this.device)||(this.context=this.canvas.getContext("webgpu"),!this.context))return!1;const i=navigator.gpu.getPreferredCanvasFormat();this.context.configure({device:this.device,format:i,alphaMode:"opaque"}),this.sampler=this.device.createSampler({magFilter:"linear",minFilter:"linear"}),this.uniformBuffer=this.device.createBuffer({size:8,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST});const n=`
2
+ struct VertexOutput {
3
+ @builtin(position) position: vec4f,
4
+ @location(0) texCoord: vec2f,
5
+ }
6
+
7
+ @vertex
8
+ fn vertexMain(@builtin(vertex_index) vertexIndex: u32) -> VertexOutput {
9
+ var pos = array<vec2f, 6>(
10
+ vec2f(-1.0, -1.0),
11
+ vec2f(1.0, -1.0),
12
+ vec2f(-1.0, 1.0),
13
+ vec2f(-1.0, 1.0),
14
+ vec2f(1.0, -1.0),
15
+ vec2f(1.0, 1.0)
16
+ );
17
+
18
+ var texCoord = array<vec2f, 6>(
19
+ vec2f(0.0, 1.0),
20
+ vec2f(1.0, 1.0),
21
+ vec2f(0.0, 0.0),
22
+ vec2f(0.0, 0.0),
23
+ vec2f(1.0, 1.0),
24
+ vec2f(1.0, 0.0)
25
+ );
26
+
27
+ var output: VertexOutput;
28
+ output.position = vec4f(pos[vertexIndex], 0.0, 1.0);
29
+ output.texCoord = texCoord[vertexIndex];
30
+ return output;
31
+ }
32
+ `,d=this.device.createShaderModule({code:n+`
33
+ @group(0) @binding(0) var videoTexture: texture_external;
34
+ @group(0) @binding(1) var texSampler: sampler;
35
+
36
+ @fragment
37
+ fn fragmentMain(input: VertexOutput) -> @location(0) vec4f {
38
+ return textureSampleBaseClampToEdge(videoTexture, texSampler, input.texCoord);
39
+ }
40
+ `}),o=this.device.createShaderModule({code:n+`
41
+ @group(0) @binding(0) var videoTexture: texture_external;
42
+ @group(0) @binding(1) var<uniform> texSize: vec2f;
43
+
44
+ // Bicubic weight function (Catmull-Rom)
45
+ fn cubic(x: f32) -> f32 {
46
+ let x_abs = abs(x);
47
+ if (x_abs <= 1.0) {
48
+ return 1.5 * x_abs * x_abs * x_abs - 2.5 * x_abs * x_abs + 1.0;
49
+ } else if (x_abs < 2.0) {
50
+ return -0.5 * x_abs * x_abs * x_abs + 2.5 * x_abs * x_abs - 4.0 * x_abs + 2.0;
51
+ }
52
+ return 0.0;
53
+ }
54
+
55
+ @fragment
56
+ fn fragmentMain(input: VertexOutput) -> @location(0) vec4f {
57
+ let texCoord = input.texCoord;
58
+
59
+ let coord = texCoord * texSize;
60
+ let coordFloor = floor(coord);
61
+ let f = coord - coordFloor;
62
+
63
+ var result = vec4f(0.0, 0.0, 0.0, 0.0);
64
+ var weightSum = 0.0;
65
+
66
+ // Read exact pixel values from 4x4 neighborhood using textureLoad
67
+ for (var y = -1; y <= 2; y++) {
68
+ for (var x = -1; x <= 2; x++) {
69
+ let pixelCoord = vec2i(i32(coordFloor.x) + x, i32(coordFloor.y) + y);
70
+
71
+ // Clamp to valid texture coordinates
72
+ let clampedCoord = clamp(pixelCoord, vec2i(0, 0), vec2i(i32(texSize.x) - 1, i32(texSize.y) - 1));
73
+
74
+ let weight = cubic(f.x - f32(x)) * cubic(f.y - f32(y));
75
+ result += textureLoad(videoTexture, clampedCoord) * weight;
76
+ weightSum += weight;
77
+ }
78
+ }
79
+
80
+ return result / weightSum;
81
+ }
82
+ `});return this.linearPipeline=this.device.createRenderPipeline({layout:"auto",vertex:{module:d,entryPoint:"vertexMain"},fragment:{module:d,entryPoint:"fragmentMain",targets:[{format:i}]},primitive:{topology:"triangle-list"}}),this.bicubicPipeline=this.device.createRenderPipeline({layout:"auto",vertex:{module:o,entryPoint:"vertexMain"},fragment:{module:o,entryPoint:"fragmentMain",targets:[{format:i}]},primitive:{topology:"triangle-list"}}),!0}initBitmapRenderer(){this.bitmapCtx=this.canvas.getContext("bitmaprenderer")}drawImage(t){if(this.mode==="webgpu")this.drawImageWebGPU(t);else if(this.mode==="bitmap")this.drawImageBitmap(t);else throw new Error("GPUDrawImage not initialized. Call init() first.")}drawImageWebGPU(t){const i=this.filterMode==="bicubic"?this.bicubicPipeline:this.linearPipeline,n=this.filterMode==="bicubic",d=[{binding:0,resource:this.device.importExternalTexture({source:t})}];if(n){const W=new Float32Array([t.displayWidth,t.displayHeight]);this.device.queue.writeBuffer(this.uniformBuffer,0,W),d.push({binding:1,resource:{buffer:this.uniformBuffer}})}else d.push({binding:1,resource:this.sampler});const o=this.device.createBindGroup({layout:i.getBindGroupLayout(0),entries:d}),u=this.device.createCommandEncoder(),h=this.context.getCurrentTexture().createView(),S=u.beginRenderPass({colorAttachments:[{view:h,clearValue:{r:0,g:0,b:0,a:1},loadOp:"clear",storeOp:"store"}]});S.setPipeline(i),S.setBindGroup(0,o),S.draw(6),S.end(),this.device.queue.submit([u.finish()])}async drawImageBitmap(t){const i=await createImageBitmap(t);this.bitmapCtx.transferFromImageBitmap(i)}getMode(){return this.mode}getFilterMode(){return this.filterMode}setFilterMode(t){if(t!=="linear"&&t!=="bicubic")throw new Error('Filter mode must be "linear" or "bicubic"');this.filterMode=t}destroy(){this.device&&this.device.destroy()}}function zs(e){var i;const t=[];if((i=e.format)!=null&&i.includes("planar"))for(let n=0;n<e.numberOfChannels;n++){const d=new Float32Array(e.numberOfFrames);e.copyTo(d,{frameOffset:0,planeIndex:n}),t.push(d)}else{const n=new Float32Array(e.numberOfFrames*e.numberOfChannels);e.copyTo(n,{frameOffset:0,planeIndex:0});for(let d=0;d<e.numberOfChannels;d++){const o=new Float32Array(e.numberOfFrames);for(let u=0;u<e.numberOfFrames;u++)o[u]=n[u*e.numberOfChannels+d];t.push(o)}}return t}function bi(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function Ut(e){var t=e;this.ordinal=function(){return t}}Ut.STEREO=new Ut(0);Ut.JOINT_STEREO=new Ut(1);Ut.DUAL_CHANNEL=new Ut(2);Ut.MONO=new Ut(3);Ut.NOT_SET=new Ut(4);var Os=Ut;const Pn=bi(Os);function Un(e){return new Int8Array(e)}function An(e){return new Int16Array(e)}function js(e){return new Int32Array(e)}function Qs(e){return new Float32Array(e)}function zn(e){return new Float64Array(e)}function Ds(e){if(e.length==1)return Qs(e[0]);var t=e[0];e=e.slice(1);for(var i=[],n=0;n<t;n++)i.push(Ds(e));return i}function $s(e){if(e.length==1)return js(e[0]);var t=e[0];e=e.slice(1);for(var i=[],n=0;n<t;n++)i.push($s(e));return i}function qs(e){if(e.length==1)return An(e[0]);var t=e[0];e=e.slice(1);for(var i=[],n=0;n<t;n++)i.push(qs(e));return i}function en(e){if(e.length==1)return new Array(e[0]);var t=e[0];e=e.slice(1);for(var i=[],n=0;n<t;n++)i.push(en(e));return i}var tn={};tn.fill=function(e,t,i,n){if(arguments.length==2)for(var d=0;d<e.length;d++)e[d]=arguments[1];else for(var d=t;d<i;d++)e[d]=n};var j0={};j0.arraycopy=function(e,t,i,n,d){for(var o=t+d;t<o;)i[n++]=e[t++]};j0.out={};j0.out.println=function(e){console.log(e)};j0.out.printf=function(){console.log.apply(console,arguments)};var pi={};pi.SQRT2=1.4142135623730951;pi.FAST_LOG10=function(e){return Math.log10(e)};pi.FAST_LOG10_X=function(e,t){return Math.log10(e)*t};function r0(e){this.ordinal=e}r0.short_block_allowed=new r0(0);r0.short_block_coupled=new r0(1);r0.short_block_dispensed=new r0(2);r0.short_block_forced=new r0(3);var sn={};sn.MAX_VALUE=34028235e31;function Kt(e){this.ordinal=e}Kt.vbr_off=new Kt(0);Kt.vbr_mt=new Kt(1);Kt.vbr_rh=new Kt(2);Kt.vbr_abr=new Kt(3);Kt.vbr_mtrh=new Kt(4);Kt.vbr_default=Kt.vbr_mtrh;var On=function(e){},it={System:j0,VbrMode:Kt,Float:sn,ShortBlock:r0,Util:pi,Arrays:tn,new_array_n:en,new_byte:Un,new_double:zn,new_float:Qs,new_float_n:Ds,new_int:js,new_int_n:$s,new_short_n:qs,assert:On},Wi,ps;function jn(){if(ps)return Wi;ps=1;var e=it,t=e.System;e.VbrMode,e.Float,e.ShortBlock;var i=e.Util,n=e.Arrays;e.new_array_n,e.new_byte,e.new_double;var d=e.new_float;e.new_float_n,e.new_int,e.new_int_n,e.assert;var o=bt();function u(){var h=[-.1482523854003001,32.308141959636465,296.40344946382766,883.1344870032432,11113.947376231741,1057.2713659324597,305.7402417275812,30.825928907280012,3.8533188138216365,59.42900443849514,709.5899960123345,5281.91112291017,-5829.66483675846,-817.6293103748613,-76.91656988279972,-4.594269939176596,.9063471690191471,.1960342806591213,-.15466694054279598,34.324387823855965,301.8067566458425,817.599602898885,11573.795901679885,1181.2520595540152,321.59731579894424,31.232021761053772,3.7107095756221318,53.650946155329365,684.167428119626,5224.56624370173,-6366.391851890084,-908.9766368219582,-89.83068876699639,-5.411397422890401,.8206787908286602,.3901806440322567,-.16070888947830023,36.147034243915876,304.11815768187864,732.7429163887613,11989.60988270091,1300.012278487897,335.28490093152146,31.48816102859945,3.373875931311736,47.232241542899175,652.7371796173471,5132.414255594984,-6909.087078780055,-1001.9990371107289,-103.62185754286375,-6.104916304710272,.7416505462720353,.5805693545089249,-.16636367662261495,37.751650073343995,303.01103387567713,627.9747488785183,12358.763425278165,1412.2779918482834,346.7496836825721,31.598286663170416,3.1598635433980946,40.57878626349686,616.1671130880391,5007.833007176154,-7454.040671756168,-1095.7960341867115,-118.24411666465777,-6.818469345853504,.6681786379192989,.7653668647301797,-.1716176790982088,39.11551877123304,298.3413246578966,503.5259106886539,12679.589408408976,1516.5821921214542,355.9850766329023,31.395241710249053,2.9164211881972335,33.79716964664243,574.8943997801362,4853.234992253242,-7997.57021486075,-1189.7624067269965,-133.6444792601766,-7.7202770609839915,.5993769336819237,.9427934736519954,-.17645823955292173,40.21879108166477,289.9982036694474,359.3226160751053,12950.259102786438,1612.1013903507662,362.85067106591504,31.045922092242872,2.822222032597987,26.988862316190684,529.8996541764288,4671.371946949588,-8535.899136645805,-1282.5898586244496,-149.58553632943463,-8.643494270763135,.5345111359507916,1.111140466039205,-.36174739330527045,41.04429910497807,277.5463268268618,195.6386023135583,13169.43812144731,1697.6433561479398,367.40983966190305,30.557037410382826,2.531473372857427,20.070154905927314,481.50208566532336,4464.970341588308,-9065.36882077239,-1373.62841526722,-166.1660487028118,-9.58289321133207,.4729647758913199,1.268786568327291,-.36970682634889585,41.393213350082036,261.2935935556502,12.935476055240873,13336.131683328815,1772.508612059496,369.76534388639965,29.751323653701338,2.4023193045459172,13.304795348228817,430.5615775526625,4237.0568611071185,-9581.931701634761,-1461.6913552409758,-183.12733958476446,-10.718010163869403,.41421356237309503,1.414213562373095,-.37677560326535325,41.619486213528496,241.05423794991074,-187.94665032361226,13450.063605744153,1836.153896465782,369.4908799925761,29.001847876923147,2.0714759319987186,6.779591200894186,377.7767837205709,3990.386575512536,-10081.709459700915,-1545.947424837898,-200.3762958015653,-11.864482073055006,.3578057213145241,1.546020906725474,-.3829366947518991,41.1516456456653,216.47684307105183,-406.1569483347166,13511.136535077321,1887.8076599260432,367.3025214564151,28.136213436723654,1.913880671464418,.3829366947518991,323.85365704338597,3728.1472257487526,-10561.233882199509,-1625.2025997821418,-217.62525175416,-13.015432208941645,.3033466836073424,1.66293922460509,-.5822628872992417,40.35639251440489,188.20071124269245,-640.2706748618148,13519.21490106562,1927.6022433578062,362.8197642637487,26.968821921868447,1.7463817695935329,-5.62650678237171,269.3016715297017,3453.386536448852,-11016.145278780888,-1698.6569643425091,-234.7658734267683,-14.16351421663124,.2504869601913055,1.76384252869671,-.5887180101749253,39.23429103868072,155.76096234403798,-889.2492977967378,13475.470561874661,1955.0535223723712,356.4450994756727,25.894952980042156,1.5695032905781554,-11.181939564328772,214.80884394039484,3169.1640829158237,-11443.321309975563,-1765.1588461316153,-251.68908574481912,-15.49755935939164,.198912367379658,1.847759065022573,-.7912582233652842,37.39369355329111,119.699486012458,-1151.0956593239027,13380.446257078214,1970.3952110853447,348.01959814116185,24.731487364283044,1.3850130831637748,-16.421408865300393,161.05030052864092,2878.3322807850063,-11838.991423510031,-1823.985884688674,-268.2854986386903,-16.81724543849939,.1483359875383474,1.913880671464418,-.7960642926861912,35.2322109610459,80.01928065061526,-1424.0212633405113,13235.794061869668,1973.804052543835,337.9908651258184,23.289159354463873,1.3934255946442087,-21.099669467133474,108.48348407242611,2583.700758091299,-12199.726194855148,-1874.2780658979746,-284.2467154529415,-18.11369784385905,.09849140335716425,1.961570560806461,-.998795456205172,32.56307803611191,36.958364584370486,-1706.075448829146,13043.287458812016,1965.3831106103316,326.43182772364605,22.175018750622293,1.198638339011324,-25.371248002043963,57.53505923036915,2288.41886619975,-12522.674544337233,-1914.8400385312243,-299.26241273417224,-19.37805630698734,.04912684976946725,1.990369453344394,.035780907*i.SQRT2*.5/2384e-9,.017876148*i.SQRT2*.5/2384e-9,.003134727*i.SQRT2*.5/2384e-9,.002457142*i.SQRT2*.5/2384e-9,971317e-9*i.SQRT2*.5/2384e-9,218868e-9*i.SQRT2*.5/2384e-9,101566e-9*i.SQRT2*.5/2384e-9,13828e-9*i.SQRT2*.5/2384e-9,12804.797818791945,1945.5515939597317,313.4244966442953,20.801593959731544,1995.1556208053692,9.000838926174497,-29.20218120805369],S=[[2382191739347913e-28,6423305872147834e-28,9400849094049688e-28,1122435026096556e-27,1183840321267481e-27,1122435026096556e-27,940084909404969e-27,6423305872147839e-28,2382191739347918e-28,5456116108943412e-27,4878985199565852e-27,4240448995017367e-27,3559909094758252e-27,2858043359288075e-27,2156177623817898e-27,1475637723558783e-27,8371015190102974e-28,2599706096327376e-28,-5456116108943412e-27,-4878985199565852e-27,-4240448995017367e-27,-3559909094758252e-27,-2858043359288076e-27,-2156177623817898e-27,-1475637723558783e-27,-8371015190102975e-28,-2599706096327376e-28,-2382191739347923e-28,-6423305872147843e-28,-9400849094049696e-28,-1122435026096556e-27,-1183840321267481e-27,-1122435026096556e-27,-9400849094049694e-28,-642330587214784e-27,-2382191739347918e-28],[2382191739347913e-28,6423305872147834e-28,9400849094049688e-28,1122435026096556e-27,1183840321267481e-27,1122435026096556e-27,9400849094049688e-28,6423305872147841e-28,2382191739347918e-28,5456116108943413e-27,4878985199565852e-27,4240448995017367e-27,3559909094758253e-27,2858043359288075e-27,2156177623817898e-27,1475637723558782e-27,8371015190102975e-28,2599706096327376e-28,-5461314069809755e-27,-4921085770524055e-27,-4343405037091838e-27,-3732668368707687e-27,-3093523840190885e-27,-2430835727329465e-27,-1734679010007751e-27,-974825365660928e-27,-2797435120168326e-28,0,0,0,0,0,0,-2283748241799531e-28,-4037858874020686e-28,-2146547464825323e-28],[.1316524975873958,.414213562373095,.7673269879789602,1.091308501069271,1.303225372841206,1.56968557711749,1.920982126971166,2.414213562373094,3.171594802363212,4.510708503662055,7.595754112725146,22.90376554843115,.984807753012208,.6427876096865394,.3420201433256688,.9396926207859084,-.1736481776669303,-.7660444431189779,.8660254037844387,.5,-.5144957554275265,-.4717319685649723,-.3133774542039019,-.1819131996109812,-.09457419252642064,-.04096558288530405,-.01419856857247115,-.003699974673760037,.8574929257125442,.8817419973177052,.9496286491027329,.9833145924917901,.9955178160675857,.9991605581781475,.999899195244447,.9999931550702802],[0,0,0,0,0,0,2283748241799531e-28,4037858874020686e-28,2146547464825323e-28,5461314069809755e-27,4921085770524055e-27,4343405037091838e-27,3732668368707687e-27,3093523840190885e-27,2430835727329466e-27,1734679010007751e-27,974825365660928e-27,2797435120168326e-28,-5456116108943413e-27,-4878985199565852e-27,-4240448995017367e-27,-3559909094758253e-27,-2858043359288075e-27,-2156177623817898e-27,-1475637723558782e-27,-8371015190102975e-28,-2599706096327376e-28,-2382191739347913e-28,-6423305872147834e-28,-9400849094049688e-28,-1122435026096556e-27,-1183840321267481e-27,-1122435026096556e-27,-9400849094049688e-28,-6423305872147841e-28,-2382191739347918e-28]],W=S[o.SHORT_TYPE],I=S[o.SHORT_TYPE],Z=S[o.SHORT_TYPE],j=S[o.SHORT_TYPE],w=[0,1,16,17,8,9,24,25,4,5,20,21,12,13,28,29,2,3,18,19,10,11,26,27,6,7,22,23,14,15,30,31];function A(k,v,r){for(var K=10,X=v+238-14-286,z=-15;z<0;z++){var T,H,p;T=h[K+-10],H=k[X+-224]*T,p=k[v+224]*T,T=h[K+-9],H+=k[X+-160]*T,p+=k[v+160]*T,T=h[K+-8],H+=k[X+-96]*T,p+=k[v+96]*T,T=h[K+-7],H+=k[X+-32]*T,p+=k[v+32]*T,T=h[K+-6],H+=k[X+32]*T,p+=k[v+-32]*T,T=h[K+-5],H+=k[X+96]*T,p+=k[v+-96]*T,T=h[K+-4],H+=k[X+160]*T,p+=k[v+-160]*T,T=h[K+-3],H+=k[X+224]*T,p+=k[v+-224]*T,T=h[K+-2],H+=k[v+-256]*T,p-=k[X+256]*T,T=h[K+-1],H+=k[v+-192]*T,p-=k[X+192]*T,T=h[K+0],H+=k[v+-128]*T,p-=k[X+128]*T,T=h[K+1],H+=k[v+-64]*T,p-=k[X+64]*T,T=h[K+2],H+=k[v+0]*T,p-=k[X+0]*T,T=h[K+3],H+=k[v+64]*T,p-=k[X+-64]*T,T=h[K+4],H+=k[v+128]*T,p-=k[X+-128]*T,T=h[K+5],H+=k[v+192]*T,p-=k[X+-192]*T,H*=h[K+6],T=p-H,r[30+z*2]=p+H,r[31+z*2]=h[K+7]*T,K+=18,v--,X++}{var H,p,m,l;p=k[v+-16]*h[K+-10],H=k[v+-32]*h[K+-2],p+=(k[v+-48]-k[v+16])*h[K+-9],H+=k[v+-96]*h[K+-1],p+=(k[v+-80]+k[v+48])*h[K+-8],H+=k[v+-160]*h[K+0],p+=(k[v+-112]-k[v+80])*h[K+-7],H+=k[v+-224]*h[K+1],p+=(k[v+-144]+k[v+112])*h[K+-6],H-=k[v+32]*h[K+2],p+=(k[v+-176]-k[v+144])*h[K+-5],H-=k[v+96]*h[K+3],p+=(k[v+-208]+k[v+176])*h[K+-4],H-=k[v+160]*h[K+4],p+=(k[v+-240]-k[v+208])*h[K+-3],H-=k[v+224],m=H-p,l=H+p,p=r[14],H=r[15]-p,r[31]=l+p,r[30]=m+H,r[15]=m-H,r[14]=l-p}{var s;s=r[28]-r[0],r[0]+=r[28],r[28]=s*h[K+-2*18+7],s=r[29]-r[1],r[1]+=r[29],r[29]=s*h[K+-2*18+7],s=r[26]-r[2],r[2]+=r[26],r[26]=s*h[K+-4*18+7],s=r[27]-r[3],r[3]+=r[27],r[27]=s*h[K+-4*18+7],s=r[24]-r[4],r[4]+=r[24],r[24]=s*h[K+-6*18+7],s=r[25]-r[5],r[5]+=r[25],r[25]=s*h[K+-6*18+7],s=r[22]-r[6],r[6]+=r[22],r[22]=s*i.SQRT2,s=r[23]-r[7],r[7]+=r[23],r[23]=s*i.SQRT2-r[7],r[7]-=r[6],r[22]-=r[7],r[23]-=r[22],s=r[6],r[6]=r[31]-s,r[31]=r[31]+s,s=r[7],r[7]=r[30]-s,r[30]=r[30]+s,s=r[22],r[22]=r[15]-s,r[15]=r[15]+s,s=r[23],r[23]=r[14]-s,r[14]=r[14]+s,s=r[20]-r[8],r[8]+=r[20],r[20]=s*h[K+-10*18+7],s=r[21]-r[9],r[9]+=r[21],r[21]=s*h[K+-10*18+7],s=r[18]-r[10],r[10]+=r[18],r[18]=s*h[K+-12*18+7],s=r[19]-r[11],r[11]+=r[19],r[19]=s*h[K+-12*18+7],s=r[16]-r[12],r[12]+=r[16],r[16]=s*h[K+-14*18+7],s=r[17]-r[13],r[13]+=r[17],r[17]=s*h[K+-14*18+7],s=-r[20]+r[24],r[20]+=r[24],r[24]=s*h[K+-12*18+7],s=-r[21]+r[25],r[21]+=r[25],r[25]=s*h[K+-12*18+7],s=r[4]-r[8],r[4]+=r[8],r[8]=s*h[K+-12*18+7],s=r[5]-r[9],r[5]+=r[9],r[9]=s*h[K+-12*18+7],s=r[0]-r[12],r[0]+=r[12],r[12]=s*h[K+-4*18+7],s=r[1]-r[13],r[1]+=r[13],r[13]=s*h[K+-4*18+7],s=r[16]-r[28],r[16]+=r[28],r[28]=s*h[K+-4*18+7],s=-r[17]+r[29],r[17]+=r[29],r[29]=s*h[K+-4*18+7],s=i.SQRT2*(r[2]-r[10]),r[2]+=r[10],r[10]=s,s=i.SQRT2*(r[3]-r[11]),r[3]+=r[11],r[11]=s,s=i.SQRT2*(-r[18]+r[26]),r[18]+=r[26],r[26]=s-r[18],s=i.SQRT2*(-r[19]+r[27]),r[19]+=r[27],r[27]=s-r[19],s=r[2],r[19]-=r[3],r[3]-=s,r[2]=r[31]-s,r[31]+=s,s=r[3],r[11]-=r[19],r[18]-=s,r[3]=r[30]-s,r[30]+=s,s=r[18],r[27]-=r[11],r[19]-=s,r[18]=r[15]-s,r[15]+=s,s=r[19],r[10]-=s,r[19]=r[14]-s,r[14]+=s,s=r[10],r[11]-=s,r[10]=r[23]-s,r[23]+=s,s=r[11],r[26]-=s,r[11]=r[22]-s,r[22]+=s,s=r[26],r[27]-=s,r[26]=r[7]-s,r[7]+=s,s=r[27],r[27]=r[6]-s,r[6]+=s,s=i.SQRT2*(r[0]-r[4]),r[0]+=r[4],r[4]=s,s=i.SQRT2*(r[1]-r[5]),r[1]+=r[5],r[5]=s,s=i.SQRT2*(r[16]-r[20]),r[16]+=r[20],r[20]=s,s=i.SQRT2*(r[17]-r[21]),r[17]+=r[21],r[21]=s,s=-i.SQRT2*(r[8]-r[12]),r[8]+=r[12],r[12]=s-r[8],s=-i.SQRT2*(r[9]-r[13]),r[9]+=r[13],r[13]=s-r[9],s=-i.SQRT2*(r[25]-r[29]),r[25]+=r[29],r[29]=s-r[25],s=-i.SQRT2*(r[24]+r[28]),r[24]-=r[28],r[28]=s-r[24],s=r[24]-r[16],r[24]=s,s=r[20]-s,r[20]=s,s=r[28]-s,r[28]=s,s=r[25]-r[17],r[25]=s,s=r[21]-s,r[21]=s,s=r[29]-s,r[29]=s,s=r[17]-r[1],r[17]=s,s=r[9]-s,r[9]=s,s=r[25]-s,r[25]=s,s=r[5]-s,r[5]=s,s=r[21]-s,r[21]=s,s=r[13]-s,r[13]=s,s=r[29]-s,r[29]=s,s=r[1]-r[0],r[1]=s,s=r[16]-s,r[16]=s,s=r[17]-s,r[17]=s,s=r[8]-s,r[8]=s,s=r[9]-s,r[9]=s,s=r[24]-s,r[24]=s,s=r[25]-s,r[25]=s,s=r[4]-s,r[4]=s,s=r[5]-s,r[5]=s,s=r[20]-s,r[20]=s,s=r[21]-s,r[21]=s,s=r[12]-s,r[12]=s,s=r[13]-s,r[13]=s,s=r[28]-s,r[28]=s,s=r[29]-s,r[29]=s,s=r[0],r[0]+=r[31],r[31]-=s,s=r[1],r[1]+=r[30],r[30]-=s,s=r[16],r[16]+=r[15],r[15]-=s,s=r[17],r[17]+=r[14],r[14]-=s,s=r[8],r[8]+=r[23],r[23]-=s,s=r[9],r[9]+=r[22],r[22]-=s,s=r[24],r[24]+=r[7],r[7]-=s,s=r[25],r[25]+=r[6],r[6]-=s,s=r[4],r[4]+=r[27],r[27]-=s,s=r[5],r[5]+=r[26],r[26]-=s,s=r[20],r[20]+=r[11],r[11]-=s,s=r[21],r[21]+=r[10],r[10]-=s,s=r[12],r[12]+=r[19],r[19]-=s,s=r[13],r[13]+=r[18],r[18]-=s,s=r[28],r[28]+=r[3],r[3]-=s,s=r[29],r[29]+=r[2],r[2]-=s}}function J(k,v){for(var r=0;r<3;r++){var K,X,z,T,H,p;T=k[v+2*3]*S[o.SHORT_TYPE][0]-k[v+5*3],K=k[v+0*3]*S[o.SHORT_TYPE][2]-k[v+3*3],X=T+K,z=T-K,T=k[v+5*3]*S[o.SHORT_TYPE][0]+k[v+2*3],K=k[v+3*3]*S[o.SHORT_TYPE][2]+k[v+0*3],H=T+K,p=-T+K,K=(k[v+1*3]*S[o.SHORT_TYPE][1]-k[v+4*3])*2069978111953089e-26,T=(k[v+4*3]*S[o.SHORT_TYPE][1]+k[v+1*3])*2069978111953089e-26,k[v+3*0]=X*190752519173728e-25+K,k[v+3*5]=-H*190752519173728e-25+T,z=z*.8660254037844387*1907525191737281e-26,H=H*.5*1907525191737281e-26+T,k[v+3*1]=z-H,k[v+3*2]=z+H,X=X*.5*1907525191737281e-26-K,p=p*.8660254037844387*1907525191737281e-26,k[v+3*3]=X+p,k[v+3*4]=X-p,v++}}function P(k,v,r){var K,X;{var z,T,H,p,m,l,s,V;z=r[17]-r[9],H=r[15]-r[11],p=r[14]-r[12],m=r[0]+r[8],l=r[1]+r[7],s=r[2]+r[6],V=r[3]+r[5],k[v+17]=m+s-V-(l-r[4]),X=(m+s-V)*I[19]+(l-r[4]),K=(z-H-p)*I[18],k[v+5]=K+X,k[v+6]=K-X,T=(r[16]-r[10])*I[18],l=l*I[19]+r[4],K=z*I[12]+T+H*I[13]+p*I[14],X=-m*I[16]+l-s*I[17]+V*I[15],k[v+1]=K+X,k[v+2]=K-X,K=z*I[13]-T-H*I[14]+p*I[12],X=-m*I[17]+l-s*I[15]+V*I[16],k[v+9]=K+X,k[v+10]=K-X,K=z*I[14]-T+H*I[12]-p*I[13],X=m*I[15]-l+s*I[16]-V*I[17],k[v+13]=K+X,k[v+14]=K-X}{var _,R,f,O,g,N,a,c;_=r[8]-r[0],f=r[6]-r[2],O=r[5]-r[3],g=r[17]+r[9],N=r[16]+r[10],a=r[15]+r[11],c=r[14]+r[12],k[v+0]=g+a+c+(N+r[13]),K=(g+a+c)*I[19]-(N+r[13]),X=(_-f+O)*I[18],k[v+11]=K+X,k[v+12]=K-X,R=(r[7]-r[1])*I[18],N=r[13]-N*I[19],K=g*I[15]-N+a*I[16]+c*I[17],X=_*I[14]+R+f*I[12]+O*I[13],k[v+3]=K+X,k[v+4]=K-X,K=-g*I[17]+N-a*I[15]-c*I[16],X=_*I[13]+R-f*I[14]-O*I[12],k[v+7]=K+X,k[v+8]=K-X,K=-g*I[16]+N-a*I[17]-c*I[15],X=_*I[12]-R+f*I[13]-O*I[14],k[v+15]=K+X,k[v+16]=K-X}}this.mdct_sub48=function(k,v,r){for(var K=v,X=286,z=0;z<k.channels_out;z++){for(var T=0;T<k.mode_gr;T++){for(var H,p=k.l3_side.tt[T][z],m=p.xr,l=0,s=k.sb_sample[z][1-T],V=0,_=0;_<18/2;_++)for(A(K,X,s[V]),A(K,X+32,s[V+1]),V+=2,X+=64,H=1;H<32;H+=2)s[V-1][H]*=-1;for(H=0;H<32;H++,l+=18){var R=p.block_type,f=k.sb_sample[z][T],O=k.sb_sample[z][1-T];if(p.mixed_block_flag!=0&&H<2&&(R=0),k.amp_filter[H]<1e-12)n.fill(m,l+0,l+18,0);else{if(k.amp_filter[H]<1)for(var _=0;_<18;_++)O[_][w[H]]*=k.amp_filter[H];if(R==o.SHORT_TYPE){for(var _=-12/4;_<0;_++){var g=S[o.SHORT_TYPE][_+3];m[l+_*3+9]=f[9+_][w[H]]*g-f[8-_][w[H]],m[l+_*3+18]=f[14-_][w[H]]*g+f[15+_][w[H]],m[l+_*3+10]=f[15+_][w[H]]*g-f[14-_][w[H]],m[l+_*3+19]=O[2-_][w[H]]*g+O[3+_][w[H]],m[l+_*3+11]=O[3+_][w[H]]*g-O[2-_][w[H]],m[l+_*3+20]=O[8-_][w[H]]*g+O[9+_][w[H]]}J(m,l)}else{for(var N=d(18),_=-36/4;_<0;_++){var a,c;a=S[R][_+27]*O[_+9][w[H]]+S[R][_+36]*O[8-_][w[H]],c=S[R][_+9]*f[_+9][w[H]]-S[R][_+18]*f[8-_][w[H]],N[_+9]=a-c*W[3+_+9],N[_+18]=a*W[3+_+9]+c}P(m,l,N)}}if(R!=o.SHORT_TYPE&&H!=0)for(var _=7;_>=0;--_){var M,L;M=m[l+_]*Z[20+_]+m[l+-1-_]*j[28+_],L=m[l+_]*j[28+_]-m[l+-1-_]*Z[20+_],m[l+-1-_]=M,m[l+_]=L}}}if(K=r,X=286,k.mode_gr==1)for(var ee=0;ee<18;ee++)t.arraycopy(k.sb_sample[z][1][ee],0,k.sb_sample[z][0][ee],0,32)}}}return Wi=u,Wi}var Li,ys;function nn(){if(ys)return Li;ys=1;var e=bt(),t=it,i=t.System;t.VbrMode,t.Float,t.ShortBlock,t.Util,t.Arrays,t.new_array_n,t.new_byte,t.new_double;var n=t.new_float,d=t.new_float_n;t.new_int,t.new_int_n,t.assert;function o(){this.l=n(e.SBMAX_l),this.s=d([e.SBMAX_s,3]);var u=this;this.assign=function(h){i.arraycopy(h.l,0,u.l,0,e.SBMAX_l);for(var S=0;S<e.SBMAX_s;S++)for(var W=0;W<3;W++)u.s[S][W]=h.s[S][W]}}return Li=o,Li}var xi,fs;function Qn(){if(fs)return xi;fs=1;var e=nn();function t(){this.thm=new e,this.en=new e}return xi=t,xi}var Hi,Zs;function bt(){if(Zs)return Hi;Zs=1;var e=it,t=e.System,i=e.VbrMode;e.Float,e.ShortBlock,e.Util,e.Arrays;var n=e.new_array_n;e.new_byte,e.new_double;var d=e.new_float,o=e.new_float_n,u=e.new_int;e.new_int_n;var h=e.assert;S.ENCDELAY=576,S.POSTDELAY=1152,S.MDCTDELAY=48,S.FFTOFFSET=224+S.MDCTDELAY,S.DECDELAY=528,S.SBLIMIT=32,S.CBANDS=64,S.SBPSY_l=21,S.SBPSY_s=12,S.SBMAX_l=22,S.SBMAX_s=13,S.PSFB21=6,S.PSFB12=6,S.BLKSIZE=1024,S.HBLKSIZE=S.BLKSIZE/2+1,S.BLKSIZE_s=256,S.HBLKSIZE_s=S.BLKSIZE_s/2+1,S.NORM_TYPE=0,S.START_TYPE=1,S.SHORT_TYPE=2,S.STOP_TYPE=3,S.MPG_MD_LR_LR=0,S.MPG_MD_LR_I=1,S.MPG_MD_MS_LR=2,S.MPG_MD_MS_I=3,S.fircoef=[-.0207887*5,-.0378413*5,-.0432472*5,-.031183*5,779609e-23*5,.0467745*5,.10091*5,.151365*5,.187098*5];function S(){var W=jn(),I=Qn(),Z=S.FFTOFFSET,j=S.MPG_MD_MS_LR,w=null;this.psy=null;var A=null,J=null,P=null;this.setModules=function(X,z,T,H){w=X,this.psy=z,A=z,J=H,P=T};var k=new W;function v(X){var z,T;if(X.ATH.useAdjust==0){X.ATH.adjust=1;return}if(T=X.loudness_sq[0][0],z=X.loudness_sq[1][0],X.channels_out==2?(T+=X.loudness_sq[0][1],z+=X.loudness_sq[1][1]):(T+=T,z+=z),X.mode_gr==2&&(T=Math.max(T,z)),T*=.5,T*=X.ATH.aaSensitivityP,T>.03125)X.ATH.adjust>=1?X.ATH.adjust=1:X.ATH.adjust<X.ATH.adjustLimit&&(X.ATH.adjust=X.ATH.adjustLimit),X.ATH.adjustLimit=1;else{var H=31.98*T+625e-6;X.ATH.adjust>=H?(X.ATH.adjust*=H*.075+.925,X.ATH.adjust<H&&(X.ATH.adjust=H)):X.ATH.adjustLimit>=H?X.ATH.adjust=H:X.ATH.adjust<X.ATH.adjustLimit&&(X.ATH.adjust=X.ATH.adjustLimit),X.ATH.adjustLimit=H}}function r(X){var z,T;for(h(0<=X.bitrate_index&&X.bitrate_index<16),h(0<=X.mode_ext&&X.mode_ext<4),X.bitrate_stereoMode_Hist[X.bitrate_index][4]++,X.bitrate_stereoMode_Hist[15][4]++,X.channels_out==2&&(X.bitrate_stereoMode_Hist[X.bitrate_index][X.mode_ext]++,X.bitrate_stereoMode_Hist[15][X.mode_ext]++),z=0;z<X.mode_gr;++z)for(T=0;T<X.channels_out;++T){var H=X.l3_side.tt[z][T].block_type|0;X.l3_side.tt[z][T].mixed_block_flag!=0&&(H=4),X.bitrate_blockType_Hist[X.bitrate_index][H]++,X.bitrate_blockType_Hist[X.bitrate_index][5]++,X.bitrate_blockType_Hist[15][H]++,X.bitrate_blockType_Hist[15][5]++}}function K(X,z){var T=X.internal_flags,H,p;if(T.lame_encode_frame_init==0){var m,l,s=d(2014),V=d(2014);for(T.lame_encode_frame_init=1,m=0,l=0;m<286+576*(1+T.mode_gr);++m)m<576*T.mode_gr?(s[m]=0,T.channels_out==2&&(V[m]=0)):(s[m]=z[0][l],T.channels_out==2&&(V[m]=z[1][l]),++l);for(p=0;p<T.mode_gr;p++)for(H=0;H<T.channels_out;H++)T.l3_side.tt[p][H].block_type=S.SHORT_TYPE;k.mdct_sub48(T,s,V),h(576>=S.FFTOFFSET),h(T.mf_size>=S.BLKSIZE+X.framesize-S.FFTOFFSET),h(T.mf_size>=512+X.framesize-32)}}this.lame_encode_mp3_frame=function(X,z,T,H,p,m){var l,s=n([2,2]);s[0][0]=new I,s[0][1]=new I,s[1][0]=new I,s[1][1]=new I;var V=n([2,2]);V[0][0]=new I,V[0][1]=new I,V[1][0]=new I,V[1][1]=new I;var _,R=[null,null],f=X.internal_flags,O=o([2,4]),g=[.5,.5],N=[[0,0],[0,0]],a=[[0,0],[0,0]],c,M,L;if(R[0]=z,R[1]=T,f.lame_encode_frame_init==0&&K(X,R),f.padding=0,(f.slot_lag-=f.frac_SpF)<0&&(f.slot_lag+=X.out_samplerate,f.padding=1),f.psymodel!=0){var ee,ae=[null,null],le=0,re=u(2);for(L=0;L<f.mode_gr;L++){for(M=0;M<f.channels_out;M++)ae[M]=R[M],le=576+L*576-S.FFTOFFSET;if(X.VBR==i.vbr_mtrh||X.VBR==i.vbr_mt?ee=A.L3psycho_anal_vbr(X,ae,le,L,s,V,N[L],a[L],O[L],re):ee=A.L3psycho_anal_ns(X,ae,le,L,s,V,N[L],a[L],O[L],re),ee!=0)return-4;for(X.mode==MPEGMode.JOINT_STEREO&&(g[L]=O[L][2]+O[L][3],g[L]>0&&(g[L]=O[L][3]/g[L])),M=0;M<f.channels_out;M++){var _e=f.l3_side.tt[L][M];_e.block_type=re[M],_e.mixed_block_flag=0}}}else for(L=0;L<f.mode_gr;L++)for(M=0;M<f.channels_out;M++)f.l3_side.tt[L][M].block_type=S.NORM_TYPE,f.l3_side.tt[L][M].mixed_block_flag=0,a[L][M]=N[L][M]=700;if(v(f),k.mdct_sub48(f,R[0],R[1]),f.mode_ext=S.MPG_MD_LR_LR,X.force_ms)f.mode_ext=S.MPG_MD_MS_LR;else if(X.mode==MPEGMode.JOINT_STEREO){var he=0,oe=0;for(L=0;L<f.mode_gr;L++)for(M=0;M<f.channels_out;M++)he+=a[L][M],oe+=N[L][M];if(he<=1*oe){var Le=f.l3_side.tt[0],Ae=f.l3_side.tt[f.mode_gr-1];Le[0].block_type==Le[1].block_type&&Ae[0].block_type==Ae[1].block_type&&(f.mode_ext=S.MPG_MD_MS_LR)}}if(f.mode_ext==j?(_=V,c=a):(_=s,c=N),X.analysis&&f.pinfo!=null)for(L=0;L<f.mode_gr;L++)for(M=0;M<f.channels_out;M++)f.pinfo.ms_ratio[L]=f.ms_ratio[L],f.pinfo.ms_ener_ratio[L]=g[L],f.pinfo.blocktype[L][M]=f.l3_side.tt[L][M].block_type,f.pinfo.pe[L][M]=c[L][M],t.arraycopy(f.l3_side.tt[L][M].xr,0,f.pinfo.xr[L][M],0,576),f.mode_ext==j&&(f.pinfo.ers[L][M]=f.pinfo.ers[L][M+2],t.arraycopy(f.pinfo.energy[L][M+2],0,f.pinfo.energy[L][M],0,f.pinfo.energy[L][M].length));if(X.VBR==i.vbr_off||X.VBR==i.vbr_abr){var We,we;for(We=0;We<18;We++)f.nsPsy.pefirbuf[We]=f.nsPsy.pefirbuf[We+1];for(we=0,L=0;L<f.mode_gr;L++)for(M=0;M<f.channels_out;M++)we+=c[L][M];for(f.nsPsy.pefirbuf[18]=we,we=f.nsPsy.pefirbuf[9],We=0;We<9;We++)we+=(f.nsPsy.pefirbuf[We]+f.nsPsy.pefirbuf[18-We])*S.fircoef[We];for(we=670*5*f.mode_gr*f.channels_out/we,L=0;L<f.mode_gr;L++)for(M=0;M<f.channels_out;M++)c[L][M]*=we}if(f.iteration_loop.iteration_loop(X,c,g,_),w.format_bitstream(X),l=w.copy_buffer(f,H,p,m,1),X.bWriteVbrTag&&J.addVbrFrame(X),X.analysis&&f.pinfo!=null){for(M=0;M<f.channels_out;M++){var Ke;for(Ke=0;Ke<Z;Ke++)f.pinfo.pcmdata[M][Ke]=f.pinfo.pcmdata[M][Ke+X.framesize];for(Ke=Z;Ke<1600;Ke++)f.pinfo.pcmdata[M][Ke]=R[M][Ke-Z]}P.set_frame_pinfo(X,_)}return r(f),l}}return Hi=S,Hi}var pt=it;pt.System;pt.VbrMode;pt.Float;pt.ShortBlock;var Xs=pt.Util;pt.Arrays;pt.new_array_n;pt.new_byte;pt.new_double;var _s=pt.new_float;pt.new_float_n;pt.new_int;pt.new_int_n;pt.assert;var Oe=bt();function Dn(){var e=_s(Oe.BLKSIZE),t=_s(Oe.BLKSIZE_s/2),i=[.9238795325112867,.3826834323650898,.9951847266721969,.0980171403295606,.9996988186962042,.02454122852291229,.9999811752826011,.006135884649154475];function n(o,u,h){var S=0,W,I,Z;h<<=1;var j=u+h;W=4;do{var w,A,J,P,k,v,r;r=W>>1,P=W,k=W<<1,v=k+P,W=k<<1,I=u,Z=I+r;do{var K,X,z,T;X=o[I+0]-o[I+P],K=o[I+0]+o[I+P],T=o[I+k]-o[I+v],z=o[I+k]+o[I+v],o[I+k]=K-z,o[I+0]=K+z,o[I+v]=X-T,o[I+P]=X+T,X=o[Z+0]-o[Z+P],K=o[Z+0]+o[Z+P],T=Xs.SQRT2*o[Z+v],z=Xs.SQRT2*o[Z+k],o[Z+k]=K-z,o[Z+0]=K+z,o[Z+v]=X-T,o[Z+P]=X+T,Z+=W,I+=W}while(I<j);for(A=i[S+0],w=i[S+1],J=1;J<r;J++){var H,p;H=1-2*w*w,p=2*w*A,I=u+J,Z=u+P-J;do{var m,l,s,K,X,V,z,_,T,R;l=p*o[I+P]-H*o[Z+P],m=H*o[I+P]+p*o[Z+P],X=o[I+0]-m,K=o[I+0]+m,V=o[Z+0]-l,s=o[Z+0]+l,l=p*o[I+v]-H*o[Z+v],m=H*o[I+v]+p*o[Z+v],T=o[I+k]-m,z=o[I+k]+m,R=o[Z+k]-l,_=o[Z+k]+l,l=w*z-A*R,m=A*z+w*R,o[I+k]=K-m,o[I+0]=K+m,o[Z+v]=V-l,o[Z+P]=V+l,l=A*_-w*T,m=w*_+A*T,o[Z+k]=s-m,o[Z+0]=s+m,o[I+v]=X-l,o[I+P]=X+l,Z+=W,I+=W}while(I<j);H=A,A=H*i[S+0]-w*i[S+1],w=H*i[S+1]+w*i[S+0]}S+=2}while(W<h)}var d=[0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240,8,136,72,200,40,168,104,232,24,152,88,216,56,184,120,248,4,132,68,196,36,164,100,228,20,148,84,212,52,180,116,244,12,140,76,204,44,172,108,236,28,156,92,220,60,188,124,252,2,130,66,194,34,162,98,226,18,146,82,210,50,178,114,242,10,138,74,202,42,170,106,234,26,154,90,218,58,186,122,250,6,134,70,198,38,166,102,230,22,150,86,214,54,182,118,246,14,142,78,206,46,174,110,238,30,158,94,222,62,190,126,254];this.fft_short=function(o,u,h,S,W){for(var I=0;I<3;I++){var Z=Oe.BLKSIZE_s/2,j=65535&576/3*(I+1),w=Oe.BLKSIZE_s/8-1;do{var A,J,P,k,v,r=d[w<<2]&255;A=t[r]*S[h][W+r+j],v=t[127-r]*S[h][W+r+j+128],J=A-v,A=A+v,P=t[r+64]*S[h][W+r+j+64],v=t[63-r]*S[h][W+r+j+192],k=P-v,P=P+v,Z-=4,u[I][Z+0]=A+P,u[I][Z+2]=A-P,u[I][Z+1]=J+k,u[I][Z+3]=J-k,A=t[r+1]*S[h][W+r+j+1],v=t[126-r]*S[h][W+r+j+129],J=A-v,A=A+v,P=t[r+65]*S[h][W+r+j+65],v=t[62-r]*S[h][W+r+j+193],k=P-v,P=P+v,u[I][Z+Oe.BLKSIZE_s/2+0]=A+P,u[I][Z+Oe.BLKSIZE_s/2+2]=A-P,u[I][Z+Oe.BLKSIZE_s/2+1]=J+k,u[I][Z+Oe.BLKSIZE_s/2+3]=J-k}while(--w>=0);n(u[I],Z,Oe.BLKSIZE_s/2)}},this.fft_long=function(o,u,h,S,W){var I=Oe.BLKSIZE/8-1,Z=Oe.BLKSIZE/2;do{var j,w,A,J,P,k=d[I]&255;j=e[k]*S[h][W+k],P=e[k+512]*S[h][W+k+512],w=j-P,j=j+P,A=e[k+256]*S[h][W+k+256],P=e[k+768]*S[h][W+k+768],J=A-P,A=A+P,Z-=4,u[Z+0]=j+A,u[Z+2]=j-A,u[Z+1]=w+J,u[Z+3]=w-J,j=e[k+1]*S[h][W+k+1],P=e[k+513]*S[h][W+k+513],w=j-P,j=j+P,A=e[k+257]*S[h][W+k+257],P=e[k+769]*S[h][W+k+769],J=A-P,A=A+P,u[Z+Oe.BLKSIZE/2+0]=j+A,u[Z+Oe.BLKSIZE/2+2]=j-A,u[Z+Oe.BLKSIZE/2+1]=w+J,u[Z+Oe.BLKSIZE/2+3]=w-J}while(--I>=0);n(u,Z,Oe.BLKSIZE/2)},this.init_fft=function(o){for(var u=0;u<Oe.BLKSIZE;u++)e[u]=.42-.5*Math.cos(2*Math.PI*(u+.5)/Oe.BLKSIZE)+.08*Math.cos(4*Math.PI*(u+.5)/Oe.BLKSIZE);for(var u=0;u<Oe.BLKSIZE_s/2;u++)t[u]=.5*(1-Math.cos(2*Math.PI*(u+.5)/Oe.BLKSIZE_s))}}var $n=Dn,yt=it;yt.System;var W0=yt.VbrMode,Gs=yt.Float,L0=yt.ShortBlock,mt=yt.Util,qn=yt.Arrays;yt.new_array_n;yt.new_byte;yt.new_double;var je=yt.new_float,kt=yt.new_float_n,h0=yt.new_int;yt.new_int_n;var ue=yt.assert,er=$n,D=bt();function tr(){var e=new er,t=2.302585092994046,i=2,n=16,d=2,o=16,u=.34,h=1/(14752*14752)/(D.BLKSIZE/2),S=.01,W=.8,I=.6,Z=.3,j=3.5,w=21,A=.2302585093;function J(b){return b}function P(b,y){for(var x=0,Y=0;Y<D.BLKSIZE/2;++Y)x+=b[Y]*y.ATH.eql_w[Y];return x*=h,x}function k(b,y,x,Y,F,G,C,E,B,$,U){var q=b.internal_flags;if(B<2)e.fft_long(q,Y[F],B,$,U),e.fft_short(q,G[C],B,$,U);else if(B==2){for(var ce=D.BLKSIZE-1;ce>=0;--ce){var Ze=Y[F+0][ce],ie=Y[F+1][ce];Y[F+0][ce]=(Ze+ie)*mt.SQRT2*.5,Y[F+1][ce]=(Ze-ie)*mt.SQRT2*.5}for(var fe=2;fe>=0;--fe)for(var ce=D.BLKSIZE_s-1;ce>=0;--ce){var Ze=G[C+0][fe][ce],ie=G[C+1][fe][ce];G[C+0][fe][ce]=(Ze+ie)*mt.SQRT2*.5,G[C+1][fe][ce]=(Ze-ie)*mt.SQRT2*.5}}y[0]=Y[F+0][0],y[0]*=y[0];for(var ce=D.BLKSIZE/2-1;ce>=0;--ce){var Q=Y[F+0][D.BLKSIZE/2-ce],be=Y[F+0][D.BLKSIZE/2+ce];y[D.BLKSIZE/2-ce]=(Q*Q+be*be)*.5}for(var fe=2;fe>=0;--fe){x[fe][0]=G[C+0][fe][0],x[fe][0]*=x[fe][0];for(var ce=D.BLKSIZE_s/2-1;ce>=0;--ce){var Q=G[C+0][fe][D.BLKSIZE_s/2-ce],be=G[C+0][fe][D.BLKSIZE_s/2+ce];x[fe][D.BLKSIZE_s/2-ce]=(Q*Q+be*be)*.5}}{for(var Re=0,ce=11;ce<D.HBLKSIZE;ce++)Re+=y[ce];q.tot_ener[B]=Re}if(b.analysis){for(var ce=0;ce<D.HBLKSIZE;ce++)q.pinfo.energy[E][B][ce]=q.pinfo.energy_save[B][ce],q.pinfo.energy_save[B][ce]=y[ce];q.pinfo.pe[E][B]=q.pe[B]}b.athaa_loudapprox==2&&B<2&&(q.loudness_sq[E][B]=q.loudness_sq_save[B],q.loudness_sq_save[B]=P(y,q))}var v=8,r=23,K=15,X,z,T,H=[1,.79433,.63096,.63096,.63096,.63096,.63096,.25119,.11749];function p(){X=Math.pow(10,(v+1)/16),z=Math.pow(10,(r+1)/16),T=Math.pow(10,K/10)}var m=[3.3246*3.3246,3.23837*3.23837,3.15437*3.15437,3.00412*3.00412,2.86103*2.86103,2.65407*2.65407,2.46209*2.46209,2.284*2.284,2.11879*2.11879,1.96552*1.96552,1.82335*1.82335,1.69146*1.69146,1.56911*1.56911,1.46658*1.46658,1.37074*1.37074,1.31036*1.31036,1.25264*1.25264,1.20648*1.20648,1.16203*1.16203,1.12765*1.12765,1.09428*1.09428,1.0659*1.0659,1.03826*1.03826,1.01895*1.01895,1],l=[1.33352*1.33352,1.35879*1.35879,1.38454*1.38454,1.39497*1.39497,1.40548*1.40548,1.3537*1.3537,1.30382*1.30382,1.22321*1.22321,1.14758*1.14758,1],s=[2.35364*2.35364,2.29259*2.29259,2.23313*2.23313,2.12675*2.12675,2.02545*2.02545,1.87894*1.87894,1.74303*1.74303,1.61695*1.61695,1.49999*1.49999,1.39148*1.39148,1.29083*1.29083,1.19746*1.19746,1.11084*1.11084,1.03826*1.03826];function V(b,y,x,Y,F,G){var C;if(y>b)if(y<b*z)C=y/b;else return b+y;else{if(b>=y*z)return b+y;C=b/y}if(ue(b>=0),ue(y>=0),b+=y,Y+3<=6){if(C>=X)return b;var E=0|mt.FAST_LOG10_X(C,16);return b*l[E]}var E=0|mt.FAST_LOG10_X(C,16);if(y=F.ATH.cb_l[x]*F.ATH.adjust,ue(y>=0),b<T*y){if(b>y){var B,$;return B=1,E<=13&&(B=s[E]),$=mt.FAST_LOG10_X(b/y,10/15),b*((m[E]-B)*$+B)}return E>13?b:b*s[E]}return b*m[E]}var _=[1.33352*1.33352,1.35879*1.35879,1.38454*1.38454,1.39497*1.39497,1.40548*1.40548,1.3537*1.3537,1.30382*1.30382,1.22321*1.22321,1.14758*1.14758,1];function R(b,y,x){var Y;if(b<0&&(b=0),y<0&&(y=0),b<=0)return y;if(y<=0)return b;if(y>b?Y=y/b:Y=b/y,-2<=x&&x<=2){if(Y>=X)return b+y;var F=0|mt.FAST_LOG10_X(Y,16);return(b+y)*_[F]}return Y<z?b+y:(b<y&&(b=y),b)}function f(b,y){var x=b.internal_flags;if(x.channels_out>1){for(var Y=0;Y<D.SBMAX_l;Y++){var F=x.thm[0].l[Y],G=x.thm[1].l[Y];x.thm[0].l[Y]+=G*y,x.thm[1].l[Y]+=F*y}for(var Y=0;Y<D.SBMAX_s;Y++)for(var C=0;C<3;C++){var F=x.thm[0].s[Y][C],G=x.thm[1].s[Y][C];x.thm[0].s[Y][C]+=G*y,x.thm[1].s[Y][C]+=F*y}}}function O(b){for(var y=0;y<D.SBMAX_l;y++)if(!(b.thm[0].l[y]>1.58*b.thm[1].l[y]||b.thm[1].l[y]>1.58*b.thm[0].l[y])){var x=b.mld_l[y]*b.en[3].l[y],Y=Math.max(b.thm[2].l[y],Math.min(b.thm[3].l[y],x));x=b.mld_l[y]*b.en[2].l[y];var F=Math.max(b.thm[3].l[y],Math.min(b.thm[2].l[y],x));b.thm[2].l[y]=Y,b.thm[3].l[y]=F}for(var y=0;y<D.SBMAX_s;y++)for(var G=0;G<3;G++)if(!(b.thm[0].s[y][G]>1.58*b.thm[1].s[y][G]||b.thm[1].s[y][G]>1.58*b.thm[0].s[y][G])){var x=b.mld_s[y]*b.en[3].s[y][G],Y=Math.max(b.thm[2].s[y][G],Math.min(b.thm[3].s[y][G],x));x=b.mld_s[y]*b.en[2].s[y][G];var F=Math.max(b.thm[3].s[y][G],Math.min(b.thm[2].s[y][G],x));b.thm[2].s[y][G]=Y,b.thm[3].s[y][G]=F}}function g(b,y,x){var Y=y,F=Math.pow(10,x);y*=2,Y*=2;for(var G=0;G<D.SBMAX_l;G++){var C,E,B,$;if($=b.ATH.cb_l[b.bm_l[G]]*F,C=Math.min(Math.max(b.thm[0].l[G],$),Math.max(b.thm[1].l[G],$)),E=Math.max(b.thm[2].l[G],$),B=Math.max(b.thm[3].l[G],$),C*y<E+B){var U=C*Y/(E+B);E*=U,B*=U,ue(E+B>0)}b.thm[2].l[G]=Math.min(E,b.thm[2].l[G]),b.thm[3].l[G]=Math.min(B,b.thm[3].l[G])}F*=D.BLKSIZE_s/D.BLKSIZE;for(var G=0;G<D.SBMAX_s;G++)for(var q=0;q<3;q++){var C,E,B,$;if($=b.ATH.cb_s[b.bm_s[G]]*F,C=Math.min(Math.max(b.thm[0].s[G][q],$),Math.max(b.thm[1].s[G][q],$)),E=Math.max(b.thm[2].s[G][q],$),B=Math.max(b.thm[3].s[G][q],$),C*y<E+B){var U=C*y/(E+B);E*=U,B*=U,ue(E+B>0)}b.thm[2].s[G][q]=Math.min(b.thm[2].s[G][q],E),b.thm[3].s[G][q]=Math.min(b.thm[3].s[G][q],B)}}function N(b,y,x,Y,F){var G,C,E=0,B=0;for(G=C=0;G<D.SBMAX_s;++C,++G){for(var $=b.bo_s[G],U=b.npart_s,q=$<U?$:U;C<q;)ue(y[C]>=0),ue(x[C]>=0),E+=y[C],B+=x[C],C++;if(b.en[Y].s[G][F]=E,b.thm[Y].s[G][F]=B,C>=U){++G;break}ue(y[C]>=0),ue(x[C]>=0);{var ce=b.PSY.bo_s_weight[G],Ze=1-ce;E=ce*y[C],B=ce*x[C],b.en[Y].s[G][F]+=E,b.thm[Y].s[G][F]+=B,E=Ze*y[C],B=Ze*x[C]}}for(;G<D.SBMAX_s;++G)b.en[Y].s[G][F]=0,b.thm[Y].s[G][F]=0}function a(b,y,x,Y){var F,G,C=0,E=0;for(F=G=0;F<D.SBMAX_l;++G,++F){for(var B=b.bo_l[F],$=b.npart_l,U=B<$?B:$;G<U;)ue(y[G]>=0),ue(x[G]>=0),C+=y[G],E+=x[G],G++;if(b.en[Y].l[F]=C,b.thm[Y].l[F]=E,G>=$){++F;break}ue(y[G]>=0),ue(x[G]>=0);{var q=b.PSY.bo_l_weight[F],ce=1-q;C=q*y[G],E=q*x[G],b.en[Y].l[F]+=C,b.thm[Y].l[F]+=E,C=ce*y[G],E=ce*x[G]}}for(;F<D.SBMAX_l;++F)b.en[Y].l[F]=0,b.thm[Y].l[F]=0}function c(b,y,x,Y,F,G){var C=b.internal_flags,E,B;for(B=E=0;B<C.npart_s;++B){for(var $=0,U=C.numlines_s[B],q=0;q<U;++q,++E){var ce=y[G][E];$+=ce}x[B]=$}for(ue(B==C.npart_s),ue(E==129),E=B=0;B<C.npart_s;B++){var Ze=C.s3ind_s[B][0],ie=C.s3_ss[E++]*x[Ze];for(++Ze;Ze<=C.s3ind_s[B][1];)ie+=C.s3_ss[E]*x[Ze],++E,++Ze;{var fe=d*C.nb_s1[F][B];Y[B]=Math.min(ie,fe)}if(C.blocktype_old[F&1]==D.SHORT_TYPE){var fe=o*C.nb_s2[F][B],Q=Y[B];Y[B]=Math.min(fe,Q)}C.nb_s2[F][B]=C.nb_s1[F][B],C.nb_s1[F][B]=ie,ue(Y[B]>=0)}for(;B<=D.CBANDS;++B)x[B]=0,Y[B]=0}function M(b,y,x,Y){var F=b.internal_flags;b.short_blocks==L0.short_block_coupled&&!(y[0]!=0&&y[1]!=0)&&(y[0]=y[1]=0);for(var G=0;G<F.channels_out;G++)Y[G]=D.NORM_TYPE,b.short_blocks==L0.short_block_dispensed&&(y[G]=1),b.short_blocks==L0.short_block_forced&&(y[G]=0),y[G]!=0?(ue(F.blocktype_old[G]!=D.START_TYPE),F.blocktype_old[G]==D.SHORT_TYPE&&(Y[G]=D.STOP_TYPE)):(Y[G]=D.SHORT_TYPE,F.blocktype_old[G]==D.NORM_TYPE&&(F.blocktype_old[G]=D.START_TYPE),F.blocktype_old[G]==D.STOP_TYPE&&(F.blocktype_old[G]=D.SHORT_TYPE)),x[G]=F.blocktype_old[G],F.blocktype_old[G]=Y[G]}function L(b,y,x){return x>=1?b:x<=0?y:y>0?Math.pow(b/y,x)*y:0}var ee=[11.8,13.6,17.2,32,46.5,51.3,57.5,67.1,71.5,84.6,97.6,130];function ae(b,y){for(var x=309.07,Y=0;Y<D.SBMAX_s-1;Y++)for(var F=0;F<3;F++){var G=b.thm.s[Y][F];if(ue(Y<ee.length),G>0){var C=G*y,E=b.en.s[Y][F];E>C&&(E>C*1e10?x+=ee[Y]*(10*t):(ue(C>0),x+=ee[Y]*mt.FAST_LOG10(E/C)))}}return x}var le=[6.8,5.8,5.8,6.4,6.5,9.9,12.1,14.4,15,18.9,21.6,26.9,34.2,40.2,46.8,56.5,60.7,73.9,85.7,93.4,126.1];function re(b,y){for(var x=281.0575,Y=0;Y<D.SBMAX_l-1;Y++){var F=b.thm.l[Y];if(ue(Y<le.length),F>0){var G=F*y,C=b.en.l[Y];C>G&&(C>G*1e10?x+=le[Y]*(10*t):(ue(G>0),x+=le[Y]*mt.FAST_LOG10(C/G)))}}return x}function _e(b,y,x,Y,F){var G,C;for(G=C=0;G<b.npart_l;++G){var E=0,B=0,$;for($=0;$<b.numlines_l[G];++$,++C){var U=y[C];ue(U>=0),E+=U,B<U&&(B=U)}x[G]=E,Y[G]=B,F[G]=E*b.rnumlines_l[G],ue(b.rnumlines_l[G]>=0),ue(E>=0),ue(x[G]>=0),ue(Y[G]>=0),ue(F[G]>=0)}}function he(b,y,x,Y){var F=H.length-1,G=0,C=x[G]+x[G+1];if(ue(C>=0),C>0){var E=y[G];E<y[G+1]&&(E=y[G+1]),ue(b.numlines_l[G]+b.numlines_l[G+1]-1>0),C=20*(E*2-C)/(C*(b.numlines_l[G]+b.numlines_l[G+1]-1));var B=0|C;B>F&&(B=F),Y[G]=B}else Y[G]=0;for(G=1;G<b.npart_l-1;G++)if(C=x[G-1]+x[G]+x[G+1],ue(C>=0),C>0){var E=y[G-1];E<y[G]&&(E=y[G]),E<y[G+1]&&(E=y[G+1]),ue(b.numlines_l[G-1]+b.numlines_l[G]+b.numlines_l[G+1]-1>0),C=20*(E*3-C)/(C*(b.numlines_l[G-1]+b.numlines_l[G]+b.numlines_l[G+1]-1));var B=0|C;B>F&&(B=F),Y[G]=B}else Y[G]=0;if(ue(G>0),ue(G==b.npart_l-1),C=x[G-1]+x[G],ue(C>=0),C>0){var E=y[G-1];E<y[G]&&(E=y[G]),ue(b.numlines_l[G-1]+b.numlines_l[G]-1>0),C=20*(E*2-C)/(C*(b.numlines_l[G-1]+b.numlines_l[G]-1));var B=0|C;B>F&&(B=F),Y[G]=B}else Y[G]=0;ue(G==b.npart_l-1)}var oe=[-865163e-23*2,-.00851586*2,-674764e-23*2,.0209036*2,-336639e-22*2,-.0438162*2,-154175e-22*2,.0931738*2,-552212e-22*2,-.313819*2];this.L3psycho_anal_ns=function(b,y,x,Y,F,G,C,E,B,$){var U=b.internal_flags,q=kt([2,D.BLKSIZE]),ce=kt([2,3,D.BLKSIZE_s]),Ze=je(D.CBANDS+1),ie=je(D.CBANDS+1),fe=je(D.CBANDS+2),Q=h0(2),be=h0(2),Re,se,pe,te,Xe,ke,de,Ie,Te=kt([2,576]),ge,Lt=h0(D.CBANDS+2),ze=h0(D.CBANDS+2);for(qn.fill(ze,0),Re=U.channels_out,b.mode==MPEGMode.JOINT_STEREO&&(Re=4),b.VBR==W0.vbr_off?ge=U.ResvMax==0?0:U.ResvSize/U.ResvMax*.5:b.VBR==W0.vbr_rh||b.VBR==W0.vbr_mtrh||b.VBR==W0.vbr_mt?ge=.6:ge=1,se=0;se<U.channels_out;se++){var Be=y[se],ct=x+576-350-w+192;for(ue(oe.length==(w-1)/2),te=0;te<576;te++){var xt,Ht;for(xt=Be[ct+te+10],Ht=0,Xe=0;Xe<(w-1)/2-1;Xe+=2)xt+=oe[Xe]*(Be[ct+te+Xe]+Be[ct+te+w-Xe]),Ht+=oe[Xe+1]*(Be[ct+te+Xe+1]+Be[ct+te+w-Xe-1]);Te[se][te]=xt+Ht}F[Y][se].en.assign(U.en[se]),F[Y][se].thm.assign(U.thm[se]),Re>2&&(G[Y][se].en.assign(U.en[se+2]),G[Y][se].thm.assign(U.thm[se+2]))}for(se=0;se<Re;se++){var Jt,Et,nt=je(12),At=[0,0,0,0],T0=je(12),_i=1,cs,ds=je(D.CBANDS),ms=je(D.CBANDS),Fe=[0,0,0,0],us=je(D.HBLKSIZE),hs=kt([3,D.HBLKSIZE_s]);for(ue(U.npart_s<=D.CBANDS),ue(U.npart_l<=D.CBANDS),te=0;te<3;te++)nt[te]=U.nsPsy.last_en_subshort[se][te+6],ue(U.nsPsy.last_en_subshort[se][te+4]>0),T0[te]=nt[te]/U.nsPsy.last_en_subshort[se][te+4],At[0]+=nt[te];if(se==2)for(te=0;te<576;te++){var Gi,Si;Gi=Te[0][te],Si=Te[1][te],Te[0][te]=Gi+Si,Te[1][te]=Gi-Si}{var bs=Te[se&1],g0=0;for(te=0;te<9;te++){for(var gn=g0+64,$e=1;g0<gn;g0++)$e<Math.abs(bs[g0])&&($e=Math.abs(bs[g0]));U.nsPsy.last_en_subshort[se][te]=nt[te+3]=$e,At[1+te/3]+=$e,$e>nt[te+3-2]?(ue(nt[te+3-2]>0),$e=$e/nt[te+3-2]):nt[te+3-2]>$e*10?(ue($e>0),$e=nt[te+3-2]/($e*10)):$e=0,T0[te+3]=$e}}if(b.analysis){var vi=T0[0];for(te=1;te<12;te++)vi<T0[te]&&(vi=T0[te]);U.pinfo.ers[Y][se]=U.pinfo.ers_save[se],U.pinfo.ers_save[se]=vi}for(cs=se==3?U.nsPsy.attackthre_s:U.nsPsy.attackthre,te=0;te<12;te++)Fe[te/3]==0&&T0[te]>cs&&(Fe[te/3]=te%3+1);for(te=1;te<4;te++){var Ii;At[te-1]>At[te]?(ue(At[te]>0),Ii=At[te-1]/At[te]):(ue(At[te-1]>0),Ii=At[te]/At[te-1]),Ii<1.7&&(Fe[te]=0,te==1&&(Fe[0]=0))}for(Fe[0]!=0&&U.nsPsy.lastAttacks[se]!=0&&(Fe[0]=0),(U.nsPsy.lastAttacks[se]==3||Fe[0]+Fe[1]+Fe[2]+Fe[3]!=0)&&(_i=0,Fe[1]!=0&&Fe[0]!=0&&(Fe[1]=0),Fe[2]!=0&&Fe[1]!=0&&(Fe[2]=0),Fe[3]!=0&&Fe[2]!=0&&(Fe[3]=0)),se<2?be[se]=_i:_i==0&&(be[0]=be[1]=0),B[se]=U.tot_ener[se],Et=ce,Jt=q,k(b,us,hs,Jt,se&1,Et,se&1,Y,se,y,x),_e(U,us,Ze,ds,ms),he(U,ds,ms,Lt),Ie=0;Ie<3;Ie++){var Vi,dt;for(c(b,hs,ie,fe,se,Ie),N(U,ie,fe,se,Ie),de=0;de<D.SBMAX_s;de++){if(dt=U.thm[se].s[de][Ie],dt*=W,Fe[Ie]>=2||Fe[Ie+1]==1){var F0=Ie!=0?Ie-1:2,$e=L(U.thm[se].s[de][F0],dt,I*ge);dt=Math.min(dt,$e)}if(Fe[Ie]==1){var F0=Ie!=0?Ie-1:2,$e=L(U.thm[se].s[de][F0],dt,Z*ge);dt=Math.min(dt,$e)}else if(Ie!=0&&Fe[Ie-1]==3||Ie==0&&U.nsPsy.lastAttacks[se]==3){var F0=Ie!=2?Ie+1:0,$e=L(U.thm[se].s[de][F0],dt,Z*ge);dt=Math.min(dt,$e)}Vi=nt[Ie*3+3]+nt[Ie*3+4]+nt[Ie*3+5],nt[Ie*3+5]*6<Vi&&(dt*=.5,nt[Ie*3+4]*6<Vi&&(dt*=.5)),U.thm[se].s[de][Ie]=dt}}for(U.nsPsy.lastAttacks[se]=Fe[2],ke=0,pe=0;pe<U.npart_l;pe++){for(var m0=U.s3ind[pe][0],Ri=Ze[m0]*H[Lt[m0]],u0=U.s3_ll[ke++]*Ri;++m0<=U.s3ind[pe][1];)Ri=Ze[m0]*H[Lt[m0]],u0=V(u0,U.s3_ll[ke++]*Ri,m0,m0-pe,U);u0*=.158489319246111,U.blocktype_old[se&1]==D.SHORT_TYPE?fe[pe]=u0:fe[pe]=L(Math.min(u0,Math.min(i*U.nb_1[se][pe],n*U.nb_2[se][pe])),u0,ge),U.nb_2[se][pe]=U.nb_1[se][pe],U.nb_1[se][pe]=u0}for(;pe<=D.CBANDS;++pe)Ze[pe]=0,fe[pe]=0;a(U,Ze,fe,se)}if((b.mode==MPEGMode.STEREO||b.mode==MPEGMode.JOINT_STEREO)&&b.interChRatio>0&&f(b,b.interChRatio),b.mode==MPEGMode.JOINT_STEREO){var Ti;O(U),Ti=b.msfix,Math.abs(Ti)>0&&g(U,Ti,b.ATHlower*U.ATH.adjust)}for(M(b,be,$,Q),se=0;se<Re;se++){var J0,E0=0,ei,ti;se>1?(J0=E,E0=-2,ei=D.NORM_TYPE,($[0]==D.SHORT_TYPE||$[1]==D.SHORT_TYPE)&&(ei=D.SHORT_TYPE),ti=G[Y][se-2]):(J0=C,E0=0,ei=$[se],ti=F[Y][se]),ei==D.SHORT_TYPE?J0[E0+se]=ae(ti,U.masking_lower):J0[E0+se]=re(ti,U.masking_lower),b.analysis&&(U.pinfo.pe[Y][se]=J0[E0+se])}return 0};function Le(b,y,x,Y,F,G,C,E){var B=b.internal_flags;if(Y<2)e.fft_long(B,C[E],Y,y,x);else if(Y==2)for(var $=D.BLKSIZE-1;$>=0;--$){var U=C[E+0][$],q=C[E+1][$];C[E+0][$]=(U+q)*mt.SQRT2*.5,C[E+1][$]=(U-q)*mt.SQRT2*.5}G[0]=C[E+0][0],G[0]*=G[0];for(var $=D.BLKSIZE/2-1;$>=0;--$){var ce=C[E+0][D.BLKSIZE/2-$],Ze=C[E+0][D.BLKSIZE/2+$];G[D.BLKSIZE/2-$]=(ce*ce+Ze*Ze)*.5}{for(var ie=0,$=11;$<D.HBLKSIZE;$++)ie+=G[$];B.tot_ener[Y]=ie}if(b.analysis){for(var $=0;$<D.HBLKSIZE;$++)B.pinfo.energy[F][Y][$]=B.pinfo.energy_save[Y][$],B.pinfo.energy_save[Y][$]=G[$];B.pinfo.pe[F][Y]=B.pe[Y]}}function Ae(b,y,x,Y,F,G,C,E){var B=b.internal_flags;if(F==0&&Y<2&&e.fft_short(B,C[E],Y,y,x),Y==2)for(var $=D.BLKSIZE_s-1;$>=0;--$){var U=C[E+0][F][$],q=C[E+1][F][$];C[E+0][F][$]=(U+q)*mt.SQRT2*.5,C[E+1][F][$]=(U-q)*mt.SQRT2*.5}G[F][0]=C[E+0][F][0],G[F][0]*=G[F][0];for(var $=D.BLKSIZE_s/2-1;$>=0;--$){var ce=C[E+0][F][D.BLKSIZE_s/2-$],Ze=C[E+0][F][D.BLKSIZE_s/2+$];G[F][D.BLKSIZE_s/2-$]=(ce*ce+Ze*Ze)*.5}}function We(b,y,x,Y){var F=b.internal_flags;b.athaa_loudapprox==2&&x<2&&(F.loudness_sq[y][x]=F.loudness_sq_save[x],F.loudness_sq_save[x]=P(Y,F))}var we=[-865163e-23*2,-.00851586*2,-674764e-23*2,.0209036*2,-336639e-22*2,-.0438162*2,-154175e-22*2,.0931738*2,-552212e-22*2,-.313819*2];function Ke(b,y,x,Y,F,G,C,E,B,$){for(var U=kt([2,576]),q=b.internal_flags,ce=q.channels_out,Ze=b.mode==MPEGMode.JOINT_STEREO?4:ce,ie=0;ie<ce;ie++){firbuf=y[ie];var fe=x+576-350-w+192;ue(we.length==(w-1)/2);for(var Q=0;Q<576;Q++){var be,Re;be=firbuf[fe+Q+10],Re=0;for(var se=0;se<(w-1)/2-1;se+=2)be+=we[se]*(firbuf[fe+Q+se]+firbuf[fe+Q+w-se]),Re+=we[se+1]*(firbuf[fe+Q+se+1]+firbuf[fe+Q+w-se-1]);U[ie][Q]=be+Re}F[Y][ie].en.assign(q.en[ie]),F[Y][ie].thm.assign(q.thm[ie]),Ze>2&&(G[Y][ie].en.assign(q.en[ie+2]),G[Y][ie].thm.assign(q.thm[ie+2]))}for(var ie=0;ie<Ze;ie++){var pe=je(12),te=je(12),Xe=[0,0,0,0],ke=U[ie&1],de=0,Ie=ie==3?q.nsPsy.attackthre_s:q.nsPsy.attackthre,Te=1;if(ie==2)for(var Q=0,se=576;se>0;++Q,--se){var ge=U[0][Q],Lt=U[1][Q];U[0][Q]=ge+Lt,U[1][Q]=ge-Lt}for(var Q=0;Q<3;Q++)te[Q]=q.nsPsy.last_en_subshort[ie][Q+6],ue(q.nsPsy.last_en_subshort[ie][Q+4]>0),pe[Q]=te[Q]/q.nsPsy.last_en_subshort[ie][Q+4],Xe[0]+=te[Q];for(var Q=0;Q<9;Q++){for(var ze=de+64,Be=1;de<ze;de++)Be<Math.abs(ke[de])&&(Be=Math.abs(ke[de]));q.nsPsy.last_en_subshort[ie][Q]=te[Q+3]=Be,Xe[1+Q/3]+=Be,Be>te[Q+3-2]?(ue(te[Q+3-2]>0),Be=Be/te[Q+3-2]):te[Q+3-2]>Be*10?(ue(Be>0),Be=te[Q+3-2]/(Be*10)):Be=0,pe[Q+3]=Be}for(var Q=0;Q<3;++Q){var ct=te[Q*3+3]+te[Q*3+4]+te[Q*3+5],xt=1;te[Q*3+5]*6<ct&&(xt*=.5,te[Q*3+4]*6<ct&&(xt*=.5)),E[ie][Q]=xt}if(b.analysis){for(var Ht=pe[0],Q=1;Q<12;Q++)Ht<pe[Q]&&(Ht=pe[Q]);q.pinfo.ers[Y][ie]=q.pinfo.ers_save[ie],q.pinfo.ers_save[ie]=Ht}for(var Q=0;Q<12;Q++)B[ie][Q/3]==0&&pe[Q]>Ie&&(B[ie][Q/3]=Q%3+1);for(var Q=1;Q<4;Q++){var Jt=Xe[Q-1],Et=Xe[Q],nt=Math.max(Jt,Et);nt<4e4&&Jt<1.7*Et&&Et<1.7*Jt&&(Q==1&&B[ie][0]<=B[ie][Q]&&(B[ie][0]=0),B[ie][Q]=0)}B[ie][0]<=q.nsPsy.lastAttacks[ie]&&(B[ie][0]=0),(q.nsPsy.lastAttacks[ie]==3||B[ie][0]+B[ie][1]+B[ie][2]+B[ie][3]!=0)&&(Te=0,B[ie][1]!=0&&B[ie][0]!=0&&(B[ie][1]=0),B[ie][2]!=0&&B[ie][1]!=0&&(B[ie][2]=0),B[ie][3]!=0&&B[ie][2]!=0&&(B[ie][3]=0)),ie<2?$[ie]=Te:Te==0&&($[0]=$[1]=0),C[ie]=q.tot_ener[ie]}}function De(b,y,x){if(x==0)for(var Y=0;Y<b.npart_s;Y++)b.nb_s2[y][Y]=b.nb_s1[y][Y],b.nb_s1[y][Y]=0}function st(b,y){for(var x=0;x<b.npart_l;x++)b.nb_2[y][x]=b.nb_1[y][x],b.nb_1[y][x]=0}function a0(b,y,x,Y){var F=H.length-1,G=0,C=x[G]+x[G+1];if(ue(C>=0),C>0){var E=y[G];E<y[G+1]&&(E=y[G+1]),ue(b.numlines_s[G]+b.numlines_s[G+1]-1>0),C=20*(E*2-C)/(C*(b.numlines_s[G]+b.numlines_s[G+1]-1));var B=0|C;B>F&&(B=F),Y[G]=B}else Y[G]=0;for(G=1;G<b.npart_s-1;G++)if(C=x[G-1]+x[G]+x[G+1],ue(G+1<b.npart_s),ue(C>=0),C>0){var E=y[G-1];E<y[G]&&(E=y[G]),E<y[G+1]&&(E=y[G+1]),ue(b.numlines_s[G-1]+b.numlines_s[G]+b.numlines_s[G+1]-1>0),C=20*(E*3-C)/(C*(b.numlines_s[G-1]+b.numlines_s[G]+b.numlines_s[G+1]-1));var B=0|C;B>F&&(B=F),Y[G]=B}else Y[G]=0;if(ue(G>0),ue(G==b.npart_s-1),C=x[G-1]+x[G],ue(C>=0),C>0){var E=y[G-1];E<y[G]&&(E=y[G]),ue(b.numlines_s[G-1]+b.numlines_s[G]-1>0),C=20*(E*2-C)/(C*(b.numlines_s[G-1]+b.numlines_s[G]-1));var B=0|C;B>F&&(B=F),Y[G]=B}else Y[G]=0;ue(G==b.npart_s-1)}function gt(b,y,x,Y,F,G){var C=b.internal_flags,E=new float[D.CBANDS],B=je(D.CBANDS),$,U,q,ce=new int[D.CBANDS];for(q=U=0;q<C.npart_s;++q){var Ze=0,ie=0,fe=C.numlines_s[q];for($=0;$<fe;++$,++U){var Q=y[G][U];Ze+=Q,ie<Q&&(ie=Q)}x[q]=Ze,ue(Ze>=0),E[q]=ie,ue(fe>0),B[q]=Ze/fe,ue(B[q]>=0)}for(ue(q==C.npart_s),ue(U==129);q<D.CBANDS;++q)E[q]=0,B[q]=0;for(a0(C,E,B,ce),U=q=0;q<C.npart_s;q++){var be=C.s3ind_s[q][0],Re=C.s3ind_s[q][1],se,pe,te,Xe,ke;for(se=ce[be],pe=1,Xe=C.s3_ss[U]*x[be]*H[ce[be]],++U,++be;be<=Re;)se+=ce[be],pe+=1,te=C.s3_ss[U]*x[be]*H[ce[be]],Xe=R(Xe,te,be-q),++U,++be;se=(1+2*se)/(2*pe),ke=H[se]*.5,Xe*=ke,Y[q]=Xe,C.nb_s2[F][q]=C.nb_s1[F][q],C.nb_s1[F][q]=Xe,te=E[q],te*=C.minval_s[q],te*=ke,Y[q]>te&&(Y[q]=te),C.masking_lower>1&&(Y[q]*=C.masking_lower),Y[q]>x[q]&&(Y[q]=x[q]),C.masking_lower<1&&(Y[q]*=C.masking_lower),ue(Y[q]>=0)}for(;q<D.CBANDS;++q)x[q]=0,Y[q]=0}function Ft(b,y,x,Y,F){var G=je(D.CBANDS),C=je(D.CBANDS),E=h0(D.CBANDS+2),B;_e(b,y,x,G,C),he(b,G,C,E);var $=0;for(B=0;B<b.npart_l;B++){var U,q,ce,Ze,ie=b.s3ind[B][0],fe=b.s3ind[B][1],Q=0,be=0;for(Q=E[ie],be+=1,q=b.s3_ll[$]*x[ie]*H[E[ie]],++$,++ie;ie<=fe;)Q+=E[ie],be+=1,U=b.s3_ll[$]*x[ie]*H[E[ie]],Ze=R(q,U,ie-B),q=Ze,++$,++ie;if(Q=(1+2*Q)/(2*be),ce=H[Q]*.5,q*=ce,b.blocktype_old[F&1]==D.SHORT_TYPE){var Re=i*b.nb_1[F][B];Re>0?Y[B]=Math.min(q,Re):Y[B]=Math.min(q,x[B]*Z)}else{var se=n*b.nb_2[F][B],pe=i*b.nb_1[F][B],Re;se<=0&&(se=q),pe<=0&&(pe=q),b.blocktype_old[F&1]==D.NORM_TYPE?Re=Math.min(pe,se):Re=pe,Y[B]=Math.min(q,Re)}b.nb_2[F][B]=b.nb_1[F][B],b.nb_1[F][B]=q,U=G[B],U*=b.minval_l[B],U*=ce,Y[B]>U&&(Y[B]=U),b.masking_lower>1&&(Y[B]*=b.masking_lower),Y[B]>x[B]&&(Y[B]=x[B]),b.masking_lower<1&&(Y[B]*=b.masking_lower),ue(Y[B]>=0)}for(;B<D.CBANDS;++B)x[B]=0,Y[B]=0}function l0(b,y){var x=b.internal_flags;b.short_blocks==L0.short_block_coupled&&!(y[0]!=0&&y[1]!=0)&&(y[0]=y[1]=0);for(var Y=0;Y<x.channels_out;Y++)b.short_blocks==L0.short_block_dispensed&&(y[Y]=1),b.short_blocks==L0.short_block_forced&&(y[Y]=0)}function $0(b,y,x){for(var Y=b.internal_flags,F=0;F<Y.channels_out;F++){var G=D.NORM_TYPE;y[F]!=0?(ue(Y.blocktype_old[F]!=D.START_TYPE),Y.blocktype_old[F]==D.SHORT_TYPE&&(G=D.STOP_TYPE)):(G=D.SHORT_TYPE,Y.blocktype_old[F]==D.NORM_TYPE&&(Y.blocktype_old[F]=D.START_TYPE),Y.blocktype_old[F]==D.STOP_TYPE&&(Y.blocktype_old[F]=D.SHORT_TYPE)),x[F]=Y.blocktype_old[F],Y.blocktype_old[F]=G}}function C0(b,y,x,Y,F,G,C){for(var E=G*2,B=G>0?Math.pow(10,F):1,$,U,q=0;q<C;++q){var ce=b[2][q],Ze=b[3][q],ie=y[0][q],fe=y[1][q],Q=y[2][q],be=y[3][q];if(ie<=1.58*fe&&fe<=1.58*ie){var Re=x[q]*Ze,se=x[q]*ce;U=Math.max(Q,Math.min(be,Re)),$=Math.max(be,Math.min(Q,se))}else U=Q,$=be;if(G>0){var pe,te,Xe=Y[q]*B;if(pe=Math.min(Math.max(ie,Xe),Math.max(fe,Xe)),Q=Math.max(U,Xe),be=Math.max($,Xe),te=Q+be,te>0&&pe*E<te){var ke=pe*E/te;Q*=ke,be*=ke,ue(te>0)}U=Math.min(Q,U),$=Math.min(be,$)}U>ce&&(U=ce),$>Ze&&($=Ze),y[2][q]=U,y[3][q]=$}}this.L3psycho_anal_vbr=function(b,y,x,Y,F,G,C,E,B,$){var U=b.internal_flags,q,ce,Ze=je(D.HBLKSIZE),ie=kt([3,D.HBLKSIZE_s]),fe=kt([2,D.BLKSIZE]),Q=kt([2,3,D.BLKSIZE_s]),be=kt([4,D.CBANDS]),Re=kt([4,D.CBANDS]),se=kt([4,3]),pe=.6,te=[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]],Xe=h0(2),ke=b.mode==MPEGMode.JOINT_STEREO?4:U.channels_out;Ke(b,y,x,Y,F,G,B,se,te,Xe),l0(b,Xe);{for(var de=0;de<ke;de++){var Ie=de&1;q=fe,Le(b,y,x,de,Y,Ze,q,Ie),We(b,Y,de,Ze),Xe[Ie]!=0?Ft(U,Ze,be[de],Re[de],de):st(U,de)}Xe[0]+Xe[1]==2&&b.mode==MPEGMode.JOINT_STEREO&&C0(be,Re,U.mld_cb_l,U.ATH.cb_l,b.ATHlower*U.ATH.adjust,b.msfix,U.npart_l);for(var de=0;de<ke;de++){var Ie=de&1;Xe[Ie]!=0&&a(U,be[de],Re[de],de)}}{for(var Te=0;Te<3;Te++){for(var de=0;de<ke;++de){var Ie=de&1;Xe[Ie]!=0?De(U,de,Te):(ce=Q,Ae(b,y,x,de,Te,ie,ce,Ie),gt(b,ie,be[de],Re[de],de,Te))}Xe[0]+Xe[1]==0&&b.mode==MPEGMode.JOINT_STEREO&&C0(be,Re,U.mld_cb_s,U.ATH.cb_s,b.ATHlower*U.ATH.adjust,b.msfix,U.npart_s);for(var de=0;de<ke;++de){var Ie=de&1;Xe[Ie]==0&&N(U,be[de],Re[de],de,Te)}}for(var de=0;de<ke;de++){var Ie=de&1;if(Xe[Ie]==0)for(var ge=0;ge<D.SBMAX_s;ge++){for(var Lt=je(3),Te=0;Te<3;Te++){var ze=U.thm[de].s[ge][Te];if(ze*=W,te[de][Te]>=2||te[de][Te+1]==1){var Be=Te!=0?Te-1:2,ct=L(U.thm[de].s[ge][Be],ze,I*pe);ze=Math.min(ze,ct)}else if(te[de][Te]==1){var Be=Te!=0?Te-1:2,ct=L(U.thm[de].s[ge][Be],ze,Z*pe);ze=Math.min(ze,ct)}else if(Te!=0&&te[de][Te-1]==3||Te==0&&U.nsPsy.lastAttacks[de]==3){var Be=Te!=2?Te+1:0,ct=L(U.thm[de].s[ge][Be],ze,Z*pe);ze=Math.min(ze,ct)}ze*=se[de][Te],Lt[Te]=ze}for(var Te=0;Te<3;Te++)U.thm[de].s[ge][Te]=Lt[Te]}}}for(var de=0;de<ke;de++)U.nsPsy.lastAttacks[de]=te[de][2];$0(b,Xe,$);for(var de=0;de<ke;de++){var xt,Ht,Jt,Et;de>1?(xt=E,Ht=-2,Jt=D.NORM_TYPE,($[0]==D.SHORT_TYPE||$[1]==D.SHORT_TYPE)&&(Jt=D.SHORT_TYPE),Et=G[Y][de-2]):(xt=C,Ht=0,Jt=$[de],Et=F[Y][de]),Jt==D.SHORT_TYPE?xt[Ht+de]=ae(Et,U.masking_lower):xt[Ht+de]=re(Et,U.masking_lower),b.analysis&&(U.pinfo.pe[Y][de]=xt[Ht+de])}return 0};function Mt(b,y){var x=b,Y;return x>=0?Y=-x*27:Y=x*y,Y<=-72?0:Math.exp(Y*A)}function q0(b){var y=0,x=0;{var Y=0,F,G;for(Y=0;Mt(Y,b)>1e-20;Y-=1);for(F=Y,G=0;Math.abs(G-F)>1e-12;)Y=(G+F)/2,Mt(Y,b)>0?G=Y:F=Y;y=F}{var Y=0,F,G;for(Y=0;Mt(Y,b)>1e-20;Y+=1);for(F=0,G=Y;Math.abs(G-F)>1e-12;)Y=(G+F)/2,Mt(Y,b)>0?F=Y:G=Y;x=G}{var C=0,E=1e3,B;for(B=0;B<=E;++B){var Y=y+B*(x-y)/E,$=Mt(Y,b);C+=$}{var U=(E+1)/(C*(x-y));return U}}}function Xi(b){var y,x,Y,F;return y=b,y>=0?y*=3:y*=1.5,y>=.5&&y<=2.5?(F=y-.5,x=8*(F*F-2*F)):x=0,y+=.474,Y=15.811389+7.5*y-17.5*Math.sqrt(1+y*y),Y<=-60?0:(y=Math.exp((x+Y)*A),y/=.6609193,y)}function o0(b){return b<0&&(b=0),b=b*.001,13*Math.atan(.76*b)+3.5*Math.atan(b*b/(7.5*7.5))}function as(b,y,x,Y,F,G,C,E,B,$,U,q){var ce=je(D.CBANDS+1),Ze=E/(q>15?2*576:2*192),ie=h0(D.HBLKSIZE),fe;E/=B;var Q=0,be=0;for(fe=0;fe<D.CBANDS;fe++){var Re,se;for(Re=o0(E*Q),ce[fe]=E*Q,se=Q;o0(E*se)-Re<u&&se<=B/2;se++);for(b[fe]=se-Q,be=fe+1;Q<se;)ue(Q<D.HBLKSIZE),ie[Q++]=fe;if(Q>B/2){Q=B/2,++fe;break}}ue(fe<D.CBANDS),ce[fe]=E*Q;for(var pe=0;pe<q;pe++){var te,Xe,ke,de,Ie;ke=$[pe],de=$[pe+1],te=0|Math.floor(.5+U*(ke-.5)),te<0&&(te=0),Xe=0|Math.floor(.5+U*(de-.5)),Xe>B/2&&(Xe=B/2),x[pe]=(ie[te]+ie[Xe])/2,y[pe]=ie[Xe];var Te=Ze*de;C[pe]=(Te-ce[y[pe]])/(ce[y[pe]+1]-ce[y[pe]]),C[pe]<0?C[pe]=0:C[pe]>1&&(C[pe]=1),Ie=o0(E*$[pe]*U),Ie=Math.min(Ie,15.5)/15.5,G[pe]=Math.pow(10,1.25*(1-Math.cos(Math.PI*Ie))-2.5)}Q=0;for(var ge=0;ge<be;ge++){var Lt=b[ge],Re,ze;Re=o0(E*Q),ze=o0(E*(Q+Lt-1)),Y[ge]=.5*(Re+ze),Re=o0(E*(Q-.5)),ze=o0(E*(Q+Lt-.5)),F[ge]=ze-Re,Q+=Lt}return be}function ls(b,y,x,Y,F,G){var C=kt([D.CBANDS,D.CBANDS]),E,B=0;if(G)for(var $=0;$<y;$++)for(E=0;E<y;E++){var U=Xi(x[$]-x[E])*Y[E];C[$][E]=U*F[$]}else for(E=0;E<y;E++)for(var q=15+Math.min(21/x[E],12),ce=q0(q),$=0;$<y;$++){var U=ce*Mt(x[$]-x[E],q)*Y[E];C[$][E]=U*F[$]}for(var $=0;$<y;$++){for(E=0;E<y&&!(C[$][E]>0);E++);for(b[$][0]=E,E=y-1;E>0&&!(C[$][E]>0);E--);b[$][1]=E,B+=b[$][1]-b[$][0]+1}for(var Ze=je(B),ie=0,$=0;$<y;$++)for(E=b[$][0];E<=b[$][1];E++)Ze[ie++]=C[$][E];return Ze}function os(b){var y=o0(b);return y=Math.min(y,15.5)/15.5,Math.pow(10,1.25*(1-Math.cos(Math.PI*y))-2.5)}this.psymodel_init=function(b){var y=b.internal_flags,x,Y=!0,F=13,G=24,C=0,E=0,B=-8.25,$=-4.5,U=je(D.CBANDS),q=je(D.CBANDS),ce=je(D.CBANDS),Ze=b.out_samplerate;switch(b.experimentalZ){default:case 0:Y=!0;break;case 1:Y=!(b.VBR==W0.vbr_mtrh||b.VBR==W0.vbr_mt);break;case 2:Y=!1;break;case 3:F=8,C=-1.75,E=-.0125,B=-8.25,$=-2.25;break}for(y.ms_ener_ratio_old=.25,y.blocktype_old[0]=y.blocktype_old[1]=D.NORM_TYPE,x=0;x<4;++x){for(var Q=0;Q<D.CBANDS;++Q)y.nb_1[x][Q]=1e20,y.nb_2[x][Q]=1e20,y.nb_s1[x][Q]=y.nb_s2[x][Q]=1;for(var ie=0;ie<D.SBMAX_l;ie++)y.en[x].l[ie]=1e20,y.thm[x].l[ie]=1e20;for(var Q=0;Q<3;++Q){for(var ie=0;ie<D.SBMAX_s;ie++)y.en[x].s[ie][Q]=1e20,y.thm[x].s[ie][Q]=1e20;y.nsPsy.lastAttacks[x]=0}for(var Q=0;Q<9;Q++)y.nsPsy.last_en_subshort[x][Q]=10}for(y.loudness_sq_save[0]=y.loudness_sq_save[1]=0,y.npart_l=as(y.numlines_l,y.bo_l,y.bm_l,U,q,y.mld_l,y.PSY.bo_l_weight,Ze,D.BLKSIZE,y.scalefac_band.l,D.BLKSIZE/(2*576),D.SBMAX_l),ue(y.npart_l<D.CBANDS),x=0;x<y.npart_l;x++){var fe=C;U[x]>=F&&(fe=E*(U[x]-F)/(G-F)+C*(G-U[x])/(G-F)),ce[x]=Math.pow(10,fe/10),y.numlines_l[x]>0?y.rnumlines_l[x]=1/y.numlines_l[x]:y.rnumlines_l[x]=0}y.s3_ll=ls(y.s3ind,y.npart_l,U,q,ce,Y);var Q=0;for(x=0;x<y.npart_l;x++){var be;be=Gs.MAX_VALUE;for(var Re=0;Re<y.numlines_l[x];Re++,Q++){var se=Ze*Q/(1e3*D.BLKSIZE),pe;pe=this.ATHformula(se*1e3,b)-20,pe=Math.pow(10,.1*pe),pe*=y.numlines_l[x],be>pe&&(be=pe)}y.ATH.cb_l[x]=be,be=-20+U[x]*20/10,be>6&&(be=100),be<-15&&(be=-15),be-=8,y.minval_l[x]=Math.pow(10,be/10)*y.numlines_l[x]}for(y.npart_s=as(y.numlines_s,y.bo_s,y.bm_s,U,q,y.mld_s,y.PSY.bo_s_weight,Ze,D.BLKSIZE_s,y.scalefac_band.s,D.BLKSIZE_s/(2*192),D.SBMAX_s),ue(y.npart_s<D.CBANDS),Q=0,x=0;x<y.npart_s;x++){var be,fe=B;U[x]>=F&&(fe=$*(U[x]-F)/(G-F)+B*(G-U[x])/(G-F)),ce[x]=Math.pow(10,fe/10),be=Gs.MAX_VALUE;for(var Re=0;Re<y.numlines_s[x];Re++,Q++){var se=Ze*Q/(1e3*D.BLKSIZE_s),pe;pe=this.ATHformula(se*1e3,b)-20,pe=Math.pow(10,.1*pe),pe*=y.numlines_s[x],be>pe&&(be=pe)}y.ATH.cb_s[x]=be,be=-7+U[x]*7/12,U[x]>12&&(be*=1+Math.log(1+be)*3.1),U[x]<12&&(be*=1+Math.log(1-be)*2.3),be<-15&&(be=-15),be-=8,y.minval_s[x]=Math.pow(10,be/10)*y.numlines_s[x]}y.s3_ss=ls(y.s3ind_s,y.npart_s,U,q,ce,Y),p(),e.init_fft(y),y.decay=Math.exp(-1*t/(S*Ze/192));{var te;te=j,b.exp_nspsytune&2&&(te=1),Math.abs(b.msfix)>0&&(te=b.msfix),b.msfix=te;for(var Xe=0;Xe<y.npart_l;Xe++)y.s3ind[Xe][1]>y.npart_l-1&&(y.s3ind[Xe][1]=y.npart_l-1)}var ke=576*y.mode_gr/Ze;if(y.ATH.decay=Math.pow(10,-12/10*ke),y.ATH.adjust=.01,y.ATH.adjustLimit=1,ue(y.bo_l[D.SBMAX_l-1]<=y.npart_l),ue(y.bo_s[D.SBMAX_s-1]<=y.npart_s),b.ATHtype!=-1){var se,de=b.out_samplerate/D.BLKSIZE,Ie=0;for(se=0,x=0;x<D.BLKSIZE/2;++x)se+=de,y.ATH.eql_w[x]=1/Math.pow(10,this.ATHformula(se,b)/10),Ie+=y.ATH.eql_w[x];for(Ie=1/Ie,x=D.BLKSIZE/2;--x>=0;)y.ATH.eql_w[x]*=Ie}{for(var Xe=Q=0;Xe<y.npart_s;++Xe)for(x=0;x<y.numlines_s[Xe];++x)++Q;ue(Q==129);for(var Xe=Q=0;Xe<y.npart_l;++Xe)for(x=0;x<y.numlines_l[Xe];++x)++Q;ue(Q==513)}for(Q=0,x=0;x<y.npart_l;x++){var se=Ze*(Q+y.numlines_l[x]/2)/(1*D.BLKSIZE);y.mld_cb_l[x]=os(se),Q+=y.numlines_l[x]}for(;x<D.CBANDS;++x)y.mld_cb_l[x]=1;for(Q=0,x=0;x<y.npart_s;x++){var se=Ze*(Q+y.numlines_s[x]/2)/(1*D.BLKSIZE_s);y.mld_cb_s[x]=os(se),Q+=y.numlines_s[x]}for(;x<D.CBANDS;++x)y.mld_cb_s[x]=1;return 0};function R0(b,y){b<-.3&&(b=3410),b/=1e3,b=Math.max(.1,b);var x=3.64*Math.pow(b,-.8)-6.8*Math.exp(-.6*Math.pow(b-3.4,2))+6*Math.exp(-.15*Math.pow(b-8.7,2))+(.6+.04*y)*.001*Math.pow(b,4);return x}this.ATHformula=function(b,y){var x;switch(y.ATHtype){case 0:x=R0(b,9);break;case 1:x=R0(b,-1);break;case 2:x=R0(b,0);break;case 3:x=R0(b,1)+6;break;case 4:x=R0(b,y.ATHcurve);break;default:x=R0(b,0);break}return x}}var ir=tr,sr=Os;function nr(){this.class_id=0,this.num_samples=0,this.num_channels=0,this.in_samplerate=0,this.out_samplerate=0,this.scale=0,this.scale_left=0,this.scale_right=0,this.analysis=!1,this.bWriteVbrTag=!1,this.decode_only=!1,this.quality=0,this.mode=sr.STEREO,this.force_ms=!1,this.free_format=!1,this.findReplayGain=!1,this.decode_on_the_fly=!1,this.write_id3tag_automatic=!1,this.brate=0,this.compression_ratio=0,this.copyright=0,this.original=0,this.extension=0,this.emphasis=0,this.error_protection=0,this.strict_ISO=!1,this.disable_reservoir=!1,this.quant_comp=0,this.quant_comp_short=0,this.experimentalY=!1,this.experimentalZ=0,this.exp_nspsytune=0,this.preset=0,this.VBR=null,this.VBR_q_frac=0,this.VBR_q=0,this.VBR_mean_bitrate_kbps=0,this.VBR_min_bitrate_kbps=0,this.VBR_max_bitrate_kbps=0,this.VBR_hard_min=0,this.lowpassfreq=0,this.highpassfreq=0,this.lowpasswidth=0,this.highpasswidth=0,this.maskingadjust=0,this.maskingadjust_short=0,this.ATHonly=!1,this.ATHshort=!1,this.noATH=!1,this.ATHtype=0,this.ATHcurve=0,this.ATHlower=0,this.athaa_type=0,this.athaa_loudapprox=0,this.athaa_sensitivity=0,this.short_blocks=null,this.useTemporal=!1,this.interChRatio=0,this.msfix=0,this.tune=!1,this.tune_value_a=0,this.version=0,this.encoder_delay=0,this.encoder_padding=0,this.framesize=0,this.frameNum=0,this.lame_allocated_gfp=0,this.internal_flags=null}var rr=nr,ar=bt(),rn={};rn.SFBMAX=ar.SBMAX_s*3;var Di=rn,ft=it;ft.System;ft.VbrMode;ft.Float;ft.ShortBlock;ft.Util;ft.Arrays;ft.new_array_n;ft.new_byte;ft.new_double;var lr=ft.new_float;ft.new_float_n;var b0=ft.new_int;ft.new_int_n;ft.assert;var Yi=Di;function or(){this.xr=lr(576),this.l3_enc=b0(576),this.scalefac=b0(Yi.SFBMAX),this.xrpow_max=0,this.part2_3_length=0,this.big_values=0,this.count1=0,this.global_gain=0,this.scalefac_compress=0,this.block_type=0,this.mixed_block_flag=0,this.table_select=b0(3),this.subblock_gain=b0(4),this.region0_count=0,this.region1_count=0,this.preflag=0,this.scalefac_scale=0,this.count1table_select=0,this.part2_length=0,this.sfb_lmax=0,this.sfb_smin=0,this.psy_lmax=0,this.sfbmax=0,this.psymax=0,this.sfbdivide=0,this.width=b0(Yi.SFBMAX),this.window=b0(Yi.SFBMAX),this.count1bits=0,this.sfb_partition_table=null,this.slen=b0(4),this.max_nonzero_coeff=0;var e=this;function t(n){return new Int32Array(n)}function i(n){return new Float32Array(n)}this.assign=function(n){e.xr=i(n.xr),e.l3_enc=t(n.l3_enc),e.scalefac=t(n.scalefac),e.xrpow_max=n.xrpow_max,e.part2_3_length=n.part2_3_length,e.big_values=n.big_values,e.count1=n.count1,e.global_gain=n.global_gain,e.scalefac_compress=n.scalefac_compress,e.block_type=n.block_type,e.mixed_block_flag=n.mixed_block_flag,e.table_select=t(n.table_select),e.subblock_gain=t(n.subblock_gain),e.region0_count=n.region0_count,e.region1_count=n.region1_count,e.preflag=n.preflag,e.scalefac_scale=n.scalefac_scale,e.count1table_select=n.count1table_select,e.part2_length=n.part2_length,e.sfb_lmax=n.sfb_lmax,e.sfb_smin=n.sfb_smin,e.psy_lmax=n.psy_lmax,e.sfbmax=n.sfbmax,e.psymax=n.psymax,e.sfbdivide=n.sfbdivide,e.width=t(n.width),e.window=t(n.window),e.count1bits=n.count1bits,e.sfb_partition_table=n.sfb_partition_table.slice(0),e.slen=t(n.slen),e.max_nonzero_coeff=n.max_nonzero_coeff}}var an=or,Zt=it;Zt.System;Zt.VbrMode;Zt.Float;Zt.ShortBlock;Zt.Util;Zt.Arrays;Zt.new_array_n;Zt.new_byte;Zt.new_double;Zt.new_float;Zt.new_float_n;var Ss=Zt.new_int;Zt.new_int_n;Zt.assert;var cr=an;function dr(){this.tt=[[null,null],[null,null]],this.main_data_begin=0,this.private_bits=0,this.resvDrain_pre=0,this.resvDrain_post=0,this.scfsi=[Ss(4),Ss(4)];for(var e=0;e<2;e++)for(var t=0;t<2;t++)this.tt[e][t]=new cr}var mr=dr,Xt=it,ii=Xt.System;Xt.VbrMode;Xt.Float;Xt.ShortBlock;Xt.Util;Xt.Arrays;Xt.new_array_n;Xt.new_byte;Xt.new_double;Xt.new_float;Xt.new_float_n;var si=Xt.new_int;Xt.new_int_n;Xt.assert;var ni=bt();function ur(e,t,i,n){this.l=si(1+ni.SBMAX_l),this.s=si(1+ni.SBMAX_s),this.psfb21=si(1+ni.PSFB21),this.psfb12=si(1+ni.PSFB12);var d=this.l,o=this.s;arguments.length==4&&(this.arrL=arguments[0],this.arrS=arguments[1],this.arr21=arguments[2],this.arr12=arguments[3],ii.arraycopy(this.arrL,0,d,0,Math.min(this.arrL.length,this.l.length)),ii.arraycopy(this.arrS,0,o,0,Math.min(this.arrS.length,this.s.length)),ii.arraycopy(this.arr21,0,this.psfb21,0,Math.min(this.arr21.length,this.psfb21.length)),ii.arraycopy(this.arr12,0,this.psfb12,0,Math.min(this.arr12.length,this.psfb12.length)))}var ln=ur,_t=it;_t.System;_t.VbrMode;_t.Float;_t.ShortBlock;_t.Util;_t.Arrays;_t.new_array_n;_t.new_byte;_t.new_double;var wi=_t.new_float,hr=_t.new_float_n,br=_t.new_int;_t.new_int_n;_t.assert;var vs=bt();function pr(){this.last_en_subshort=hr([4,9]),this.lastAttacks=br(4),this.pefirbuf=wi(19),this.longfact=wi(vs.SBMAX_l),this.shortfact=wi(vs.SBMAX_s),this.attackthre=0,this.attackthre_s=0}var yr=pr;function fr(){this.sum=0,this.seen=0,this.want=0,this.pos=0,this.size=0,this.bag=null,this.nVbrNumFrames=0,this.nBytesWritten=0,this.TotalFrameSize=0}var Zr=fr,Gt=it;Gt.System;Gt.VbrMode;Gt.Float;Gt.ShortBlock;Gt.Util;Gt.Arrays;Gt.new_array_n;var Xr=Gt.new_byte,_r=Gt.new_double,Bt=Gt.new_float,p0=Gt.new_float_n,Nt=Gt.new_int,ri=Gt.new_int_n;Gt.assert;var Gr=mr,Sr=ln,vr=yr,Ir=Zr,Is=nn(),Pe=bt(),Vr=Di;n0.MFSIZE=3*1152+Pe.ENCDELAY-Pe.MDCTDELAY;n0.MAX_HEADER_BUF=256;n0.MAX_BITS_PER_CHANNEL=4095;n0.MAX_BITS_PER_GRANULE=7680;n0.BPC=320;function n0(){var e=40;this.Class_ID=0,this.lame_encode_frame_init=0,this.iteration_init_init=0,this.fill_buffer_resample_init=0,this.mfbuf=p0([2,n0.MFSIZE]),this.mode_gr=0,this.channels_in=0,this.channels_out=0,this.resample_ratio=0,this.mf_samples_to_encode=0,this.mf_size=0,this.VBR_min_bitrate=0,this.VBR_max_bitrate=0,this.bitrate_index=0,this.samplerate_index=0,this.mode_ext=0,this.lowpass1=0,this.lowpass2=0,this.highpass1=0,this.highpass2=0,this.noise_shaping=0,this.noise_shaping_amp=0,this.substep_shaping=0,this.psymodel=0,this.noise_shaping_stop=0,this.subblock_gain=0,this.use_best_huffman=0,this.full_outer_loop=0,this.l3_side=new Gr,this.ms_ratio=Bt(2),this.padding=0,this.frac_SpF=0,this.slot_lag=0,this.tag_spec=null,this.nMusicCRC=0,this.OldValue=Nt(2),this.CurrentStep=Nt(2),this.masking_lower=0,this.bv_scf=Nt(576),this.pseudohalf=Nt(Vr.SFBMAX),this.sfb21_extra=!1,this.inbuf_old=new Array(2),this.blackfilt=new Array(2*n0.BPC+1),this.itime=_r(2),this.sideinfo_len=0,this.sb_sample=p0([2,2,18,Pe.SBLIMIT]),this.amp_filter=Bt(32);function t(){this.write_timing=0,this.ptr=0,this.buf=Xr(e)}this.header=new Array(n0.MAX_HEADER_BUF),this.h_ptr=0,this.w_ptr=0,this.ancillary_flag=0,this.ResvSize=0,this.ResvMax=0,this.scalefac_band=new Sr,this.minval_l=Bt(Pe.CBANDS),this.minval_s=Bt(Pe.CBANDS),this.nb_1=p0([4,Pe.CBANDS]),this.nb_2=p0([4,Pe.CBANDS]),this.nb_s1=p0([4,Pe.CBANDS]),this.nb_s2=p0([4,Pe.CBANDS]),this.s3_ss=null,this.s3_ll=null,this.decay=0,this.thm=new Array(4),this.en=new Array(4),this.tot_ener=Bt(4),this.loudness_sq=p0([2,2]),this.loudness_sq_save=Bt(2),this.mld_l=Bt(Pe.SBMAX_l),this.mld_s=Bt(Pe.SBMAX_s),this.bm_l=Nt(Pe.SBMAX_l),this.bo_l=Nt(Pe.SBMAX_l),this.bm_s=Nt(Pe.SBMAX_s),this.bo_s=Nt(Pe.SBMAX_s),this.npart_l=0,this.npart_s=0,this.s3ind=ri([Pe.CBANDS,2]),this.s3ind_s=ri([Pe.CBANDS,2]),this.numlines_s=Nt(Pe.CBANDS),this.numlines_l=Nt(Pe.CBANDS),this.rnumlines_l=Bt(Pe.CBANDS),this.mld_cb_l=Bt(Pe.CBANDS),this.mld_cb_s=Bt(Pe.CBANDS),this.numlines_s_num1=0,this.numlines_l_num1=0,this.pe=Bt(4),this.ms_ratio_s_old=0,this.ms_ratio_l_old=0,this.ms_ener_ratio_old=0,this.blocktype_old=Nt(2),this.nsPsy=new vr,this.VBR_seek_table=new Ir,this.ATH=null,this.PSY=null,this.nogap_total=0,this.nogap_current=0,this.decode_on_the_fly=!0,this.findReplayGain=!0,this.findPeakSample=!0,this.PeakSample=0,this.RadioGain=0,this.AudiophileGain=0,this.rgdata=null,this.noclipGainChange=0,this.noclipScale=0,this.bitrate_stereoMode_Hist=ri([16,5]),this.bitrate_blockType_Hist=ri([16,6]),this.pinfo=null,this.hip=null,this.in_buffer_nsamples=0,this.in_buffer_0=null,this.in_buffer_1=null,this.iteration_loop=null;for(var i=0;i<this.en.length;i++)this.en[i]=new Is;for(var i=0;i<this.thm.length;i++)this.thm[i]=new Is;for(var i=0;i<this.header.length;i++)this.header[i]=new t}var yi=n0,St=it;St.System;St.VbrMode;St.Float;St.ShortBlock;St.Util;St.Arrays;St.new_array_n;St.new_byte;St.new_double;var y0=St.new_float;St.new_float_n;St.new_int;St.new_int_n;St.assert;var f0=bt();function Rr(){this.useAdjust=0,this.aaSensitivityP=0,this.adjust=0,this.adjustLimit=0,this.decay=0,this.floor=0,this.l=y0(f0.SBMAX_l),this.s=y0(f0.SBMAX_s),this.psfb21=y0(f0.PSFB21),this.psfb12=y0(f0.PSFB12),this.cb_l=y0(f0.CBANDS),this.cb_s=y0(f0.CBANDS),this.eql_w=y0(f0.BLKSIZE/2)}var Tr=Rr,vt=it,ut=vt.System;vt.VbrMode;vt.Float;vt.ShortBlock;vt.Util;var Vs=vt.Arrays;vt.new_array_n;vt.new_byte;vt.new_double;vt.new_float;vt.new_float_n;vt.new_int;vt.new_int_n;vt.assert;Ce.STEPS_per_dB=100;Ce.MAX_dB=120;Ce.GAIN_NOT_ENOUGH_SAMPLES=-24601;Ce.GAIN_ANALYSIS_ERROR=0;Ce.GAIN_ANALYSIS_OK=1;Ce.INIT_GAIN_ANALYSIS_ERROR=0;Ce.INIT_GAIN_ANALYSIS_OK=1;Ce.YULE_ORDER=10;Ce.MAX_ORDER=Ce.YULE_ORDER;Ce.MAX_SAMP_FREQ=48e3;Ce.RMS_WINDOW_TIME_NUMERATOR=1;Ce.RMS_WINDOW_TIME_DENOMINATOR=20;Ce.MAX_SAMPLES_PER_WINDOW=Ce.MAX_SAMP_FREQ*Ce.RMS_WINDOW_TIME_NUMERATOR/Ce.RMS_WINDOW_TIME_DENOMINATOR+1;function Ce(){var e=64.82;Ce.YULE_ORDER;var t=.95;Ce.MAX_SAMP_FREQ;var i=Ce.RMS_WINDOW_TIME_NUMERATOR,n=Ce.RMS_WINDOW_TIME_DENOMINATOR;Ce.MAX_SAMPLES_PER_WINDOW;var d=[[.038575994352,-3.84664617118067,-.02160367184185,7.81501653005538,-.00123395316851,-11.34170355132042,-9291677959e-14,13.05504219327545,-.01655260341619,-12.28759895145294,.02161526843274,9.4829380631979,-.02074045215285,-5.87257861775999,.00594298065125,2.75465861874613,.00306428023191,-.86984376593551,.00012025322027,.13919314567432,.00288463683916],[.0541865640643,-3.47845948550071,-.02911007808948,6.36317777566148,-.00848709379851,-8.54751527471874,-.00851165645469,9.4769360780128,-.00834990904936,-8.81498681370155,.02245293253339,6.85401540936998,-.02596338512915,-4.39470996079559,.01624864962975,2.19611684890774,-.00240879051584,-.75104302451432,.00674613682247,.13149317958808,-.00187763777362],[.15457299681924,-2.37898834973084,-.09331049056315,2.84868151156327,-.06247880153653,-2.64577170229825,.02163541888798,2.23697657451713,-.05588393329856,-1.67148153367602,.04781476674921,1.00595954808547,.00222312597743,-.45953458054983,.03174092540049,.16378164858596,-.01390589421898,-.05032077717131,.00651420667831,.0234789740702,-.00881362733839],[.30296907319327,-1.61273165137247,-.22613988682123,1.0797749225997,-.08587323730772,-.2565625775407,.03282930172664,-.1627671912044,-.00915702933434,-.22638893773906,-.02364141202522,.39120800788284,-.00584456039913,-.22138138954925,.06276101321749,.04500235387352,-828086748e-14,.02005851806501,.00205861885564,.00302439095741,-.02950134983287],[.33642304856132,-1.49858979367799,-.2557224142557,.87350271418188,-.11828570177555,.12205022308084,.11921148675203,-.80774944671438,-.07834489609479,.47854794562326,-.0046997791438,-.12453458140019,-.0058950022444,-.04067510197014,.05724228140351,.08333755284107,.00832043980773,-.04237348025746,-.0163538138454,.02977207319925,-.0176017656815],[.4491525660845,-.62820619233671,-.14351757464547,.29661783706366,-.22784394429749,-.372563729424,-.01419140100551,.00213767857124,.04078262797139,-.42029820170918,-.12398163381748,.22199650564824,.04097565135648,.00613424350682,.10478503600251,.06747620744683,-.01863887810927,.05784820375801,-.03193428438915,.03222754072173,.00541907748707],[.56619470757641,-1.04800335126349,-.75464456939302,.29156311971249,.1624213774223,-.26806001042947,.16744243493672,.00819999645858,-.18901604199609,.45054734505008,.3093178284183,-.33032403314006,-.27562961986224,.0673936833311,.00647310677246,-.04784254229033,.08647503780351,.01639907836189,-.0378898455484,.01807364323573,-.00588215443421],[.58100494960553,-.51035327095184,-.53174909058578,-.31863563325245,-.14289799034253,-.20256413484477,.17520704835522,.1472815413433,.02377945217615,.38952639978999,.15558449135573,-.23313271880868,-.25344790059353,-.05246019024463,.01628462406333,-.02505961724053,.06920467763959,.02442357316099,-.03721611395801,.01818801111503,-.00749618797172],[.53648789255105,-.2504987195602,-.42163034350696,-.43193942311114,-.00275953611929,-.03424681017675,.04267842219415,-.04678328784242,-.10214864179676,.26408300200955,.14590772289388,.15113130533216,-.02459864859345,-.17556493366449,-.11202315195388,-.18823009262115,-.04060034127,.05477720428674,.0478866554818,.0470440968812,-.02217936801134]],o=[[.98621192462708,-1.97223372919527,-1.97242384925416,.97261396931306,.98621192462708],[.98500175787242,-1.96977855582618,-1.97000351574484,.9702284756635,.98500175787242],[.97938932735214,-1.95835380975398,-1.95877865470428,.95920349965459,.97938932735214],[.97531843204928,-1.95002759149878,-1.95063686409857,.95124613669835,.97531843204928],[.97316523498161,-1.94561023566527,-1.94633046996323,.94705070426118,.97316523498161],[.96454515552826,-1.92783286977036,-1.92909031105652,.93034775234268,.96454515552826],[.96009142950541,-1.91858953033784,-1.92018285901082,.92177618768381,.96009142950541],[.95856916599601,-1.9154210807478,-1.91713833199203,.91885558323625,.95856916599601],[.94597685600279,-1.88903307939452,-1.89195371200558,.89487434461664,.94597685600279]];function u(Z,j,w,A,J,P){for(;J--!=0;)w[A]=1e-10+Z[j+0]*P[0]-w[A-1]*P[1]+Z[j-1]*P[2]-w[A-2]*P[3]+Z[j-2]*P[4]-w[A-3]*P[5]+Z[j-3]*P[6]-w[A-4]*P[7]+Z[j-4]*P[8]-w[A-5]*P[9]+Z[j-5]*P[10]-w[A-6]*P[11]+Z[j-6]*P[12]-w[A-7]*P[13]+Z[j-7]*P[14]-w[A-8]*P[15]+Z[j-8]*P[16]-w[A-9]*P[17]+Z[j-9]*P[18]-w[A-10]*P[19]+Z[j-10]*P[20],++A,++j}function h(Z,j,w,A,J,P){for(;J--!=0;)w[A]=Z[j+0]*P[0]-w[A-1]*P[1]+Z[j-1]*P[2]-w[A-2]*P[3]+Z[j-2]*P[4],++A,++j}function S(Z,j){for(var w=0;w<MAX_ORDER;w++)Z.linprebuf[w]=Z.lstepbuf[w]=Z.loutbuf[w]=Z.rinprebuf[w]=Z.rstepbuf[w]=Z.routbuf[w]=0;switch(0|j){case 48e3:Z.reqindex=0;break;case 44100:Z.reqindex=1;break;case 32e3:Z.reqindex=2;break;case 24e3:Z.reqindex=3;break;case 22050:Z.reqindex=4;break;case 16e3:Z.reqindex=5;break;case 12e3:Z.reqindex=6;break;case 11025:Z.reqindex=7;break;case 8e3:Z.reqindex=8;break;default:return INIT_GAIN_ANALYSIS_ERROR}return Z.sampleWindow=0|(j*i+n-1)/n,Z.lsum=0,Z.rsum=0,Z.totsamp=0,Vs.ill(Z.A,0),INIT_GAIN_ANALYSIS_OK}this.InitGainAnalysis=function(Z,j){return S(Z,j)!=INIT_GAIN_ANALYSIS_OK?INIT_GAIN_ANALYSIS_ERROR:(Z.linpre=MAX_ORDER,Z.rinpre=MAX_ORDER,Z.lstep=MAX_ORDER,Z.rstep=MAX_ORDER,Z.lout=MAX_ORDER,Z.rout=MAX_ORDER,Vs.fill(Z.B,0),INIT_GAIN_ANALYSIS_OK)};function W(Z){return Z*Z}this.AnalyzeSamples=function(Z,j,w,A,J,P,k){var v,r,K,X,z,T,H;if(P==0)return GAIN_ANALYSIS_OK;switch(H=0,z=P,k){case 1:A=j,J=w;break;case 2:break;default:return GAIN_ANALYSIS_ERROR}for(P<MAX_ORDER?(ut.arraycopy(j,w,Z.linprebuf,MAX_ORDER,P),ut.arraycopy(A,J,Z.rinprebuf,MAX_ORDER,P)):(ut.arraycopy(j,w,Z.linprebuf,MAX_ORDER,MAX_ORDER),ut.arraycopy(A,J,Z.rinprebuf,MAX_ORDER,MAX_ORDER));z>0;){T=z>Z.sampleWindow-Z.totsamp?Z.sampleWindow-Z.totsamp:z,H<MAX_ORDER?(v=Z.linpre+H,r=Z.linprebuf,K=Z.rinpre+H,X=Z.rinprebuf,T>MAX_ORDER-H&&(T=MAX_ORDER-H)):(v=w+H,r=j,K=J+H,X=A),u(r,v,Z.lstepbuf,Z.lstep+Z.totsamp,T,d[Z.reqindex]),u(X,K,Z.rstepbuf,Z.rstep+Z.totsamp,T,d[Z.reqindex]),h(Z.lstepbuf,Z.lstep+Z.totsamp,Z.loutbuf,Z.lout+Z.totsamp,T,o[Z.reqindex]),h(Z.rstepbuf,Z.rstep+Z.totsamp,Z.routbuf,Z.rout+Z.totsamp,T,o[Z.reqindex]),v=Z.lout+Z.totsamp,r=Z.loutbuf,K=Z.rout+Z.totsamp,X=Z.routbuf;for(var p=T%8;p--!=0;)Z.lsum+=W(r[v++]),Z.rsum+=W(X[K++]);for(p=T/8;p--!=0;)Z.lsum+=W(r[v+0])+W(r[v+1])+W(r[v+2])+W(r[v+3])+W(r[v+4])+W(r[v+5])+W(r[v+6])+W(r[v+7]),v+=8,Z.rsum+=W(X[K+0])+W(X[K+1])+W(X[K+2])+W(X[K+3])+W(X[K+4])+W(X[K+5])+W(X[K+6])+W(X[K+7]),K+=8;if(z-=T,H+=T,Z.totsamp+=T,Z.totsamp==Z.sampleWindow){var m=Ce.STEPS_per_dB*10*Math.log10((Z.lsum+Z.rsum)/Z.totsamp*.5+1e-37),l=m<=0?0:0|m;l>=Z.A.length&&(l=Z.A.length-1),Z.A[l]++,Z.lsum=Z.rsum=0,ut.arraycopy(Z.loutbuf,Z.totsamp,Z.loutbuf,0,MAX_ORDER),ut.arraycopy(Z.routbuf,Z.totsamp,Z.routbuf,0,MAX_ORDER),ut.arraycopy(Z.lstepbuf,Z.totsamp,Z.lstepbuf,0,MAX_ORDER),ut.arraycopy(Z.rstepbuf,Z.totsamp,Z.rstepbuf,0,MAX_ORDER),Z.totsamp=0}if(Z.totsamp>Z.sampleWindow)return GAIN_ANALYSIS_ERROR}return P<MAX_ORDER?(ut.arraycopy(Z.linprebuf,P,Z.linprebuf,0,MAX_ORDER-P),ut.arraycopy(Z.rinprebuf,P,Z.rinprebuf,0,MAX_ORDER-P),ut.arraycopy(j,w,Z.linprebuf,MAX_ORDER-P,P),ut.arraycopy(A,J,Z.rinprebuf,MAX_ORDER-P,P)):(ut.arraycopy(j,w+P-MAX_ORDER,Z.linprebuf,0,MAX_ORDER),ut.arraycopy(A,J+P-MAX_ORDER,Z.rinprebuf,0,MAX_ORDER)),GAIN_ANALYSIS_OK};function I(Z,j){var w,A=0;for(w=0;w<j;w++)A+=Z[w];if(A==0)return GAIN_NOT_ENOUGH_SAMPLES;var J=0|Math.ceil(A*(1-t));for(w=j;w-- >0&&!((J-=Z[w])<=0););return e-w/Ce.STEPS_per_dB}this.GetTitleGain=function(Z){for(var j=I(Z.A,Z.A.length),w=0;w<Z.A.length;w++)Z.B[w]+=Z.A[w],Z.A[w]=0;for(var w=0;w<MAX_ORDER;w++)Z.linprebuf[w]=Z.lstepbuf[w]=Z.loutbuf[w]=Z.rinprebuf[w]=Z.rstepbuf[w]=Z.routbuf[w]=0;return Z.totsamp=0,Z.lsum=Z.rsum=0,j}}var Wr=Ce,It=it;It.System;It.VbrMode;It.Float;It.ShortBlock;It.Util;It.Arrays;It.new_array_n;It.new_byte;It.new_double;var x0=It.new_float;It.new_float_n;var Rs=It.new_int;It.new_int_n;It.assert;var ht=Wr;function Lr(){this.linprebuf=x0(ht.MAX_ORDER*2),this.linpre=0,this.lstepbuf=x0(ht.MAX_SAMPLES_PER_WINDOW+ht.MAX_ORDER),this.lstep=0,this.loutbuf=x0(ht.MAX_SAMPLES_PER_WINDOW+ht.MAX_ORDER),this.lout=0,this.rinprebuf=x0(ht.MAX_ORDER*2),this.rinpre=0,this.rstepbuf=x0(ht.MAX_SAMPLES_PER_WINDOW+ht.MAX_ORDER),this.rstep=0,this.routbuf=x0(ht.MAX_SAMPLES_PER_WINDOW+ht.MAX_ORDER),this.rout=0,this.sampleWindow=0,this.totsamp=0,this.lsum=0,this.rsum=0,this.freqindex=0,this.first=0,this.A=Rs(0|ht.STEPS_per_dB*ht.MAX_dB),this.B=Rs(0|ht.STEPS_per_dB*ht.MAX_dB)}var xr=Lr;function Hr(e){this.bits=e}var on=Hr,Vt=it;Vt.System;Vt.VbrMode;Vt.Float;Vt.ShortBlock;Vt.Util;Vt.Arrays;Vt.new_array_n;Vt.new_byte;Vt.new_double;var Ts=Vt.new_float;Vt.new_float_n;var Yr=Vt.new_int;Vt.new_int_n;var Ws=Vt.assert,wr=on,Ls=bt(),Kr=Di,Mr=yi;function kr(e){var t=e;this.quantize=t,this.iteration_loop=function(i,n,d,o){var u=i.internal_flags,h=Ts(Kr.SFBMAX),S=Ts(576),W=Yr(2),I=0,Z,j=u.l3_side,w=new wr(I);this.quantize.rv.ResvFrameBegin(i,w),I=w.bits;for(var A=0;A<u.mode_gr;A++){Z=this.quantize.qupvt.on_pe(i,n,W,I,A,A),u.mode_ext==Ls.MPG_MD_MS_LR&&(this.quantize.ms_convert(u.l3_side,A),this.quantize.qupvt.reduce_side(W,d[A],I,Z));for(var J=0;J<u.channels_out;J++){var P,k,v=j.tt[A][J];v.block_type!=Ls.SHORT_TYPE?(P=0,k=u.PSY.mask_adjust-P):(P=0,k=u.PSY.mask_adjust_short-P),u.masking_lower=Math.pow(10,k*.1),this.quantize.init_outer_loop(u,v),this.quantize.init_xrpow(u,v,S)&&(this.quantize.qupvt.calc_xmin(i,o[A][J],v,h),this.quantize.outer_loop(i,v,h,S,J,W[J])),this.quantize.iteration_finish_one(u,A,J),Ws(v.part2_3_length<=Mr.MAX_BITS_PER_CHANNEL),Ws(v.part2_3_length<=W[J])}}this.quantize.rv.ResvFrameEnd(u,I)}}var Br=kr;function xe(e,t,i,n){this.xlen=e,this.linmax=t,this.table=i,this.hlen=n}var ne={};ne.t1HB=[1,1,1,0];ne.t2HB=[1,2,1,3,1,1,3,2,0];ne.t3HB=[3,2,1,1,1,1,3,2,0];ne.t5HB=[1,2,6,5,3,1,4,4,7,5,7,1,6,1,1,0];ne.t6HB=[7,3,5,1,6,2,3,2,5,4,4,1,3,3,2,0];ne.t7HB=[1,2,10,19,16,10,3,3,7,10,5,3,11,4,13,17,8,4,12,11,18,15,11,2,7,6,9,14,3,1,6,4,5,3,2,0];ne.t8HB=[3,4,6,18,12,5,5,1,2,16,9,3,7,3,5,14,7,3,19,17,15,13,10,4,13,5,8,11,5,1,12,4,4,1,1,0];ne.t9HB=[7,5,9,14,15,7,6,4,5,5,6,7,7,6,8,8,8,5,15,6,9,10,5,1,11,7,9,6,4,1,14,4,6,2,6,0];ne.t10HB=[1,2,10,23,35,30,12,17,3,3,8,12,18,21,12,7,11,9,15,21,32,40,19,6,14,13,22,34,46,23,18,7,20,19,33,47,27,22,9,3,31,22,41,26,21,20,5,3,14,13,10,11,16,6,5,1,9,8,7,8,4,4,2,0];ne.t11HB=[3,4,10,24,34,33,21,15,5,3,4,10,32,17,11,10,11,7,13,18,30,31,20,5,25,11,19,59,27,18,12,5,35,33,31,58,30,16,7,5,28,26,32,19,17,15,8,14,14,12,9,13,14,9,4,1,11,4,6,6,6,3,2,0];ne.t12HB=[9,6,16,33,41,39,38,26,7,5,6,9,23,16,26,11,17,7,11,14,21,30,10,7,17,10,15,12,18,28,14,5,32,13,22,19,18,16,9,5,40,17,31,29,17,13,4,2,27,12,11,15,10,7,4,1,27,12,8,12,6,3,1,0];ne.t13HB=[1,5,14,21,34,51,46,71,42,52,68,52,67,44,43,19,3,4,12,19,31,26,44,33,31,24,32,24,31,35,22,14,15,13,23,36,59,49,77,65,29,40,30,40,27,33,42,16,22,20,37,61,56,79,73,64,43,76,56,37,26,31,25,14,35,16,60,57,97,75,114,91,54,73,55,41,48,53,23,24,58,27,50,96,76,70,93,84,77,58,79,29,74,49,41,17,47,45,78,74,115,94,90,79,69,83,71,50,59,38,36,15,72,34,56,95,92,85,91,90,86,73,77,65,51,44,43,42,43,20,30,44,55,78,72,87,78,61,46,54,37,30,20,16,53,25,41,37,44,59,54,81,66,76,57,54,37,18,39,11,35,33,31,57,42,82,72,80,47,58,55,21,22,26,38,22,53,25,23,38,70,60,51,36,55,26,34,23,27,14,9,7,34,32,28,39,49,75,30,52,48,40,52,28,18,17,9,5,45,21,34,64,56,50,49,45,31,19,12,15,10,7,6,3,48,23,20,39,36,35,53,21,16,23,13,10,6,1,4,2,16,15,17,27,25,20,29,11,17,12,16,8,1,1,0,1];ne.t15HB=[7,12,18,53,47,76,124,108,89,123,108,119,107,81,122,63,13,5,16,27,46,36,61,51,42,70,52,83,65,41,59,36,19,17,15,24,41,34,59,48,40,64,50,78,62,80,56,33,29,28,25,43,39,63,55,93,76,59,93,72,54,75,50,29,52,22,42,40,67,57,95,79,72,57,89,69,49,66,46,27,77,37,35,66,58,52,91,74,62,48,79,63,90,62,40,38,125,32,60,56,50,92,78,65,55,87,71,51,73,51,70,30,109,53,49,94,88,75,66,122,91,73,56,42,64,44,21,25,90,43,41,77,73,63,56,92,77,66,47,67,48,53,36,20,71,34,67,60,58,49,88,76,67,106,71,54,38,39,23,15,109,53,51,47,90,82,58,57,48,72,57,41,23,27,62,9,86,42,40,37,70,64,52,43,70,55,42,25,29,18,11,11,118,68,30,55,50,46,74,65,49,39,24,16,22,13,14,7,91,44,39,38,34,63,52,45,31,52,28,19,14,8,9,3,123,60,58,53,47,43,32,22,37,24,17,12,15,10,2,1,71,37,34,30,28,20,17,26,21,16,10,6,8,6,2,0];ne.t16HB=[1,5,14,44,74,63,110,93,172,149,138,242,225,195,376,17,3,4,12,20,35,62,53,47,83,75,68,119,201,107,207,9,15,13,23,38,67,58,103,90,161,72,127,117,110,209,206,16,45,21,39,69,64,114,99,87,158,140,252,212,199,387,365,26,75,36,68,65,115,101,179,164,155,264,246,226,395,382,362,9,66,30,59,56,102,185,173,265,142,253,232,400,388,378,445,16,111,54,52,100,184,178,160,133,257,244,228,217,385,366,715,10,98,48,91,88,165,157,148,261,248,407,397,372,380,889,884,8,85,84,81,159,156,143,260,249,427,401,392,383,727,713,708,7,154,76,73,141,131,256,245,426,406,394,384,735,359,710,352,11,139,129,67,125,247,233,229,219,393,743,737,720,885,882,439,4,243,120,118,115,227,223,396,746,742,736,721,712,706,223,436,6,202,224,222,218,216,389,386,381,364,888,443,707,440,437,1728,4,747,211,210,208,370,379,734,723,714,1735,883,877,876,3459,865,2,377,369,102,187,726,722,358,711,709,866,1734,871,3458,870,434,0,12,10,7,11,10,17,11,9,13,12,10,7,5,3,1,3];ne.t24HB=[15,13,46,80,146,262,248,434,426,669,653,649,621,517,1032,88,14,12,21,38,71,130,122,216,209,198,327,345,319,297,279,42,47,22,41,74,68,128,120,221,207,194,182,340,315,295,541,18,81,39,75,70,134,125,116,220,204,190,178,325,311,293,271,16,147,72,69,135,127,118,112,210,200,188,352,323,306,285,540,14,263,66,129,126,119,114,214,202,192,180,341,317,301,281,262,12,249,123,121,117,113,215,206,195,185,347,330,308,291,272,520,10,435,115,111,109,211,203,196,187,353,332,313,298,283,531,381,17,427,212,208,205,201,193,186,177,169,320,303,286,268,514,377,16,335,199,197,191,189,181,174,333,321,305,289,275,521,379,371,11,668,184,183,179,175,344,331,314,304,290,277,530,383,373,366,10,652,346,171,168,164,318,309,299,287,276,263,513,375,368,362,6,648,322,316,312,307,302,292,284,269,261,512,376,370,364,359,4,620,300,296,294,288,282,273,266,515,380,374,369,365,361,357,2,1033,280,278,274,267,264,259,382,378,372,367,363,360,358,356,0,43,20,19,17,15,13,11,9,7,6,4,7,5,3,1,3];ne.t32HB=[1,10,8,20,12,20,16,32,14,12,24,0,28,16,24,16];ne.t33HB=[15,28,26,48,22,40,36,64,14,24,20,32,12,16,8,0];ne.t1l=[1,4,3,5];ne.t2l=[1,4,7,4,5,7,6,7,8];ne.t3l=[2,3,7,4,4,7,6,7,8];ne.t5l=[1,4,7,8,4,5,8,9,7,8,9,10,8,8,9,10];ne.t6l=[3,4,6,8,4,4,6,7,5,6,7,8,7,7,8,9];ne.t7l=[1,4,7,9,9,10,4,6,8,9,9,10,7,7,9,10,10,11,8,9,10,11,11,11,8,9,10,11,11,12,9,10,11,12,12,12];ne.t8l=[2,4,7,9,9,10,4,4,6,10,10,10,7,6,8,10,10,11,9,10,10,11,11,12,9,9,10,11,12,12,10,10,11,11,13,13];ne.t9l=[3,4,6,7,9,10,4,5,6,7,8,10,5,6,7,8,9,10,7,7,8,9,9,10,8,8,9,9,10,11,9,9,10,10,11,11];ne.t10l=[1,4,7,9,10,10,10,11,4,6,8,9,10,11,10,10,7,8,9,10,11,12,11,11,8,9,10,11,12,12,11,12,9,10,11,12,12,12,12,12,10,11,12,12,13,13,12,13,9,10,11,12,12,12,13,13,10,10,11,12,12,13,13,13];ne.t11l=[2,4,6,8,9,10,9,10,4,5,6,8,10,10,9,10,6,7,8,9,10,11,10,10,8,8,9,11,10,12,10,11,9,10,10,11,11,12,11,12,9,10,11,12,12,13,12,13,9,9,9,10,11,12,12,12,9,9,10,11,12,12,12,12];ne.t12l=[4,4,6,8,9,10,10,10,4,5,6,7,9,9,10,10,6,6,7,8,9,10,9,10,7,7,8,8,9,10,10,10,8,8,9,9,10,10,10,11,9,9,10,10,10,11,10,11,9,9,9,10,10,11,11,12,10,10,10,11,11,11,11,12];ne.t13l=[1,5,7,8,9,10,10,11,10,11,12,12,13,13,14,14,4,6,8,9,10,10,11,11,11,11,12,12,13,14,14,14,7,8,9,10,11,11,12,12,11,12,12,13,13,14,15,15,8,9,10,11,11,12,12,12,12,13,13,13,13,14,15,15,9,9,11,11,12,12,13,13,12,13,13,14,14,15,15,16,10,10,11,12,12,12,13,13,13,13,14,13,15,15,16,16,10,11,12,12,13,13,13,13,13,14,14,14,15,15,16,16,11,11,12,13,13,13,14,14,14,14,15,15,15,16,18,18,10,10,11,12,12,13,13,14,14,14,14,15,15,16,17,17,11,11,12,12,13,13,13,15,14,15,15,16,16,16,18,17,11,12,12,13,13,14,14,15,14,15,16,15,16,17,18,19,12,12,12,13,14,14,14,14,15,15,15,16,17,17,17,18,12,13,13,14,14,15,14,15,16,16,17,17,17,18,18,18,13,13,14,15,15,15,16,16,16,16,16,17,18,17,18,18,14,14,14,15,15,15,17,16,16,19,17,17,17,19,18,18,13,14,15,16,16,16,17,16,17,17,18,18,21,20,21,18];ne.t15l=[3,5,6,8,8,9,10,10,10,11,11,12,12,12,13,14,5,5,7,8,9,9,10,10,10,11,11,12,12,12,13,13,6,7,7,8,9,9,10,10,10,11,11,12,12,13,13,13,7,8,8,9,9,10,10,11,11,11,12,12,12,13,13,13,8,8,9,9,10,10,11,11,11,11,12,12,12,13,13,13,9,9,9,10,10,10,11,11,11,11,12,12,13,13,13,14,10,9,10,10,10,11,11,11,11,12,12,12,13,13,14,14,10,10,10,11,11,11,11,12,12,12,12,12,13,13,13,14,10,10,10,11,11,11,11,12,12,12,12,13,13,14,14,14,10,10,11,11,11,11,12,12,12,13,13,13,13,14,14,14,11,11,11,11,12,12,12,12,12,13,13,13,13,14,15,14,11,11,11,11,12,12,12,12,13,13,13,13,14,14,14,15,12,12,11,12,12,12,13,13,13,13,13,13,14,14,15,15,12,12,12,12,12,13,13,13,13,14,14,14,14,14,15,15,13,13,13,13,13,13,13,13,14,14,14,14,15,15,14,15,13,13,13,13,13,13,13,14,14,14,14,14,15,15,15,15];ne.t16_5l=[1,5,7,9,10,10,11,11,12,12,12,13,13,13,14,11,4,6,8,9,10,11,11,11,12,12,12,13,14,13,14,11,7,8,9,10,11,11,12,12,13,12,13,13,13,14,14,12,9,9,10,11,11,12,12,12,13,13,14,14,14,15,15,13,10,10,11,11,12,12,13,13,13,14,14,14,15,15,15,12,10,10,11,11,12,13,13,14,13,14,14,15,15,15,16,13,11,11,11,12,13,13,13,13,14,14,14,14,15,15,16,13,11,11,12,12,13,13,13,14,14,15,15,15,15,17,17,13,11,12,12,13,13,13,14,14,15,15,15,15,16,16,16,13,12,12,12,13,13,14,14,15,15,15,15,16,15,16,15,14,12,13,12,13,14,14,14,14,15,16,16,16,17,17,16,13,13,13,13,13,14,14,15,16,16,16,16,16,16,15,16,14,13,14,14,14,14,15,15,15,15,17,16,16,16,16,18,14,15,14,14,14,15,15,16,16,16,18,17,17,17,19,17,14,14,15,13,14,16,16,15,16,16,17,18,17,19,17,16,14,11,11,11,12,12,13,13,13,14,14,14,14,14,14,14,12];ne.t16l=[1,5,7,9,10,10,11,11,12,12,12,13,13,13,14,10,4,6,8,9,10,11,11,11,12,12,12,13,14,13,14,10,7,8,9,10,11,11,12,12,13,12,13,13,13,14,14,11,9,9,10,11,11,12,12,12,13,13,14,14,14,15,15,12,10,10,11,11,12,12,13,13,13,14,14,14,15,15,15,11,10,10,11,11,12,13,13,14,13,14,14,15,15,15,16,12,11,11,11,12,13,13,13,13,14,14,14,14,15,15,16,12,11,11,12,12,13,13,13,14,14,15,15,15,15,17,17,12,11,12,12,13,13,13,14,14,15,15,15,15,16,16,16,12,12,12,12,13,13,14,14,15,15,15,15,16,15,16,15,13,12,13,12,13,14,14,14,14,15,16,16,16,17,17,16,12,13,13,13,13,14,14,15,16,16,16,16,16,16,15,16,13,13,14,14,14,14,15,15,15,15,17,16,16,16,16,18,13,15,14,14,14,15,15,16,16,16,18,17,17,17,19,17,13,14,15,13,14,16,16,15,16,16,17,18,17,19,17,16,13,10,10,10,11,11,12,12,12,13,13,13,13,13,13,13,10];ne.t24l=[4,5,7,8,9,10,10,11,11,12,12,12,12,12,13,10,5,6,7,8,9,10,10,11,11,11,12,12,12,12,12,10,7,7,8,9,9,10,10,11,11,11,11,12,12,12,13,9,8,8,9,9,10,10,10,11,11,11,11,12,12,12,12,9,9,9,9,10,10,10,10,11,11,11,12,12,12,12,13,9,10,9,10,10,10,10,11,11,11,11,12,12,12,12,12,9,10,10,10,10,10,11,11,11,11,12,12,12,12,12,13,9,11,10,10,10,11,11,11,11,12,12,12,12,12,13,13,10,11,11,11,11,11,11,11,11,11,12,12,12,12,13,13,10,11,11,11,11,11,11,11,12,12,12,12,12,13,13,13,10,12,11,11,11,11,12,12,12,12,12,12,13,13,13,13,10,12,12,11,11,11,12,12,12,12,12,12,13,13,13,13,10,12,12,12,12,12,12,12,12,12,12,13,13,13,13,13,10,12,12,12,12,12,12,12,12,13,13,13,13,13,13,13,10,13,12,12,12,12,12,12,13,13,13,13,13,13,13,13,10,9,9,9,9,9,9,9,9,9,9,9,10,10,10,10,6];ne.t32l=[1,5,5,7,5,8,7,9,5,7,7,9,7,9,9,10];ne.t33l=[4,5,5,6,5,6,6,7,5,6,6,7,6,7,7,8];ne.ht=[new xe(0,0,null,null),new xe(2,0,ne.t1HB,ne.t1l),new xe(3,0,ne.t2HB,ne.t2l),new xe(3,0,ne.t3HB,ne.t3l),new xe(0,0,null,null),new xe(4,0,ne.t5HB,ne.t5l),new xe(4,0,ne.t6HB,ne.t6l),new xe(6,0,ne.t7HB,ne.t7l),new xe(6,0,ne.t8HB,ne.t8l),new xe(6,0,ne.t9HB,ne.t9l),new xe(8,0,ne.t10HB,ne.t10l),new xe(8,0,ne.t11HB,ne.t11l),new xe(8,0,ne.t12HB,ne.t12l),new xe(16,0,ne.t13HB,ne.t13l),new xe(0,0,null,ne.t16_5l),new xe(16,0,ne.t15HB,ne.t15l),new xe(1,1,ne.t16HB,ne.t16l),new xe(2,3,ne.t16HB,ne.t16l),new xe(3,7,ne.t16HB,ne.t16l),new xe(4,15,ne.t16HB,ne.t16l),new xe(6,63,ne.t16HB,ne.t16l),new xe(8,255,ne.t16HB,ne.t16l),new xe(10,1023,ne.t16HB,ne.t16l),new xe(13,8191,ne.t16HB,ne.t16l),new xe(4,15,ne.t24HB,ne.t24l),new xe(5,31,ne.t24HB,ne.t24l),new xe(6,63,ne.t24HB,ne.t24l),new xe(7,127,ne.t24HB,ne.t24l),new xe(8,255,ne.t24HB,ne.t24l),new xe(9,511,ne.t24HB,ne.t24l),new xe(11,2047,ne.t24HB,ne.t24l),new xe(13,8191,ne.t24HB,ne.t24l),new xe(0,0,ne.t32HB,ne.t32l),new xe(0,0,ne.t33HB,ne.t33l)];ne.largetbl=[65540,327685,458759,589832,655369,655370,720906,720907,786443,786444,786444,851980,851980,851980,917517,655370,262149,393222,524295,589832,655369,720906,720906,720907,786443,786443,786444,851980,917516,851980,917516,655370,458759,524295,589832,655369,720905,720906,786442,786443,851979,786443,851979,851980,851980,917516,917517,720905,589832,589832,655369,720905,720906,786442,786442,786443,851979,851979,917515,917516,917516,983052,983052,786441,655369,655369,720905,720906,786442,786442,851978,851979,851979,917515,917516,917516,983052,983052,983053,720905,655370,655369,720906,720906,786442,851978,851979,917515,851979,917515,917516,983052,983052,983052,1048588,786441,720906,720906,720906,786442,851978,851979,851979,851979,917515,917516,917516,917516,983052,983052,1048589,786441,720907,720906,786442,786442,851979,851979,851979,917515,917516,983052,983052,983052,983052,1114125,1114125,786442,720907,786443,786443,851979,851979,851979,917515,917515,983051,983052,983052,983052,1048588,1048589,1048589,786442,786443,786443,786443,851979,851979,917515,917515,983052,983052,983052,983052,1048588,983053,1048589,983053,851978,786444,851979,786443,851979,917515,917516,917516,917516,983052,1048588,1048588,1048589,1114125,1114125,1048589,786442,851980,851980,851979,851979,917515,917516,983052,1048588,1048588,1048588,1048588,1048589,1048589,983053,1048589,851978,851980,917516,917516,917516,917516,983052,983052,983052,983052,1114124,1048589,1048589,1048589,1048589,1179661,851978,983052,917516,917516,917516,983052,983052,1048588,1048588,1048589,1179661,1114125,1114125,1114125,1245197,1114125,851978,917517,983052,851980,917516,1048588,1048588,983052,1048589,1048589,1114125,1179661,1114125,1245197,1114125,1048589,851978,655369,655369,655369,720905,720905,786441,786441,786441,851977,851977,851977,851978,851978,851978,851978,655366];ne.table23=[65538,262147,458759,262148,327684,458759,393222,458759,524296];ne.table56=[65539,262148,458758,524296,262148,327684,524294,589831,458757,524294,589831,655368,524295,524295,589832,655369];ne.bitrate_table=[[0,8,16,24,32,40,48,56,64,80,96,112,128,144,160,-1],[0,32,40,48,56,64,80,96,112,128,160,192,224,256,320,-1],[0,8,16,24,32,40,48,56,64,-1,-1,-1,-1,-1,-1,-1]];ne.samplerate_table=[[22050,24e3,16e3,-1],[44100,48e3,32e3,-1],[11025,12e3,8e3,-1]];ne.scfsi_band=[0,6,11,16,21];var $i=ne,e0=ln,Rt=it;Rt.System;var Z0=Rt.VbrMode,ai=Rt.Float;Rt.ShortBlock;var Ki=Rt.Util;Rt.Arrays;Rt.new_array_n;Rt.new_byte;Rt.new_double;var X0=Rt.new_float;Rt.new_float_n;var Cr=Rt.new_int;Rt.new_int_n;var t0=Rt.assert,et=bt(),gr=on,lt=yi;wt.Q_MAX=257;wt.Q_MAX2=116;wt.LARGE_BITS=1e5;wt.IXMAX_VAL=8206;function wt(){var e=null,t=null,i=null;this.setModules=function(v,r,K){e=v,t=r,i=K};function n(v){return t0(0<=v+wt.Q_MAX2&&v<wt.Q_MAX),Z[v+wt.Q_MAX2]}this.IPOW20=function(v){return t0(0<=v&&v<wt.Q_MAX),j[v]};var d=2220446049250313e-31,o=wt.IXMAX_VAL,u=o+2,h=wt.Q_MAX,S=wt.Q_MAX2;wt.LARGE_BITS;var W=100;this.nr_of_sfb_block=[[[6,5,5,5],[9,9,9,9],[6,9,9,9]],[[6,5,7,3],[9,9,12,6],[6,9,12,6]],[[11,10,0,0],[18,18,0,0],[15,18,0,0]],[[7,7,7,0],[12,12,12,0],[6,15,12,0]],[[6,6,6,3],[12,9,9,6],[6,12,9,6]],[[8,8,5,0],[15,12,9,0],[6,18,9,0]]];var I=[0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,2,2,3,3,3,2,0];this.pretab=I,this.sfBandIndex=[new e0([0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576],[0,4,8,12,18,24,32,42,56,74,100,132,174,192],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0]),new e0([0,6,12,18,24,30,36,44,54,66,80,96,114,136,162,194,232,278,332,394,464,540,576],[0,4,8,12,18,26,36,48,62,80,104,136,180,192],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0]),new e0([0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576],[0,4,8,12,18,26,36,48,62,80,104,134,174,192],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0]),new e0([0,4,8,12,16,20,24,30,36,44,52,62,74,90,110,134,162,196,238,288,342,418,576],[0,4,8,12,16,22,30,40,52,66,84,106,136,192],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0]),new e0([0,4,8,12,16,20,24,30,36,42,50,60,72,88,106,128,156,190,230,276,330,384,576],[0,4,8,12,16,22,28,38,50,64,80,100,126,192],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0]),new e0([0,4,8,12,16,20,24,30,36,44,54,66,82,102,126,156,194,240,296,364,448,550,576],[0,4,8,12,16,22,30,42,58,78,104,138,180,192],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0]),new e0([0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576],[0/3,12/3,24/3,36/3,54/3,78/3,108/3,144/3,186/3,240/3,312/3,402/3,522/3,576/3],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0]),new e0([0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576],[0/3,12/3,24/3,36/3,54/3,78/3,108/3,144/3,186/3,240/3,312/3,402/3,522/3,576/3],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0]),new e0([0,12,24,36,48,60,72,88,108,132,160,192,232,280,336,400,476,566,568,570,572,574,576],[0/3,24/3,48/3,72/3,108/3,156/3,216/3,288/3,372/3,480/3,486/3,492/3,498/3,576/3],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0])];var Z=X0(h+S+1),j=X0(h),w=X0(u),A=X0(u);this.adj43=A;function J(v,r){var K=i.ATHformula(r,v);return K-=W,K=Math.pow(10,K/10+v.ATHlower),K}function P(v){for(var r=v.internal_flags.ATH.l,K=v.internal_flags.ATH.psfb21,X=v.internal_flags.ATH.s,z=v.internal_flags.ATH.psfb12,T=v.internal_flags,H=v.out_samplerate,p=0;p<et.SBMAX_l;p++){var m=T.scalefac_band.l[p],l=T.scalefac_band.l[p+1];r[p]=ai.MAX_VALUE;for(var s=m;s<l;s++){var V=s*H/1152,_=J(v,V);r[p]=Math.min(r[p],_)}}for(var p=0;p<et.PSFB21;p++){var m=T.scalefac_band.psfb21[p],l=T.scalefac_band.psfb21[p+1];K[p]=ai.MAX_VALUE;for(var s=m;s<l;s++){var V=s*H/1152,_=J(v,V);K[p]=Math.min(K[p],_)}}for(var p=0;p<et.SBMAX_s;p++){var m=T.scalefac_band.s[p],l=T.scalefac_band.s[p+1];X[p]=ai.MAX_VALUE;for(var s=m;s<l;s++){var V=s*H/384,_=J(v,V);X[p]=Math.min(X[p],_)}X[p]*=T.scalefac_band.s[p+1]-T.scalefac_band.s[p]}for(var p=0;p<et.PSFB12;p++){var m=T.scalefac_band.psfb12[p],l=T.scalefac_band.psfb12[p+1];z[p]=ai.MAX_VALUE;for(var s=m;s<l;s++){var V=s*H/384,_=J(v,V);z[p]=Math.min(z[p],_)}z[p]*=T.scalefac_band.s[13]-T.scalefac_band.s[12]}if(v.noATH){for(var p=0;p<et.SBMAX_l;p++)r[p]=1e-20;for(var p=0;p<et.PSFB21;p++)K[p]=1e-20;for(var p=0;p<et.SBMAX_s;p++)X[p]=1e-20;for(var p=0;p<et.PSFB12;p++)z[p]=1e-20}T.ATH.floor=10*Math.log10(J(v,-1))}this.iteration_init=function(v){var r=v.internal_flags,K=r.l3_side,X;if(r.iteration_init_init==0){for(r.iteration_init_init=1,K.main_data_begin=0,P(v),w[0]=0,X=1;X<u;X++)w[X]=Math.pow(X,4/3);for(X=0;X<u-1;X++)A[X]=X+1-Math.pow(.5*(w[X]+w[X+1]),.75);for(A[X]=.5,X=0;X<h;X++)j[X]=Math.pow(2,(X-210)*-.1875);for(X=0;X<=h+S;X++)Z[X]=Math.pow(2,(X-210-S)*.25);e.huffman_init(r);{var z,T,H,p;for(X=v.exp_nspsytune>>2&63,X>=32&&(X-=64),z=Math.pow(10,X/4/10),X=v.exp_nspsytune>>8&63,X>=32&&(X-=64),T=Math.pow(10,X/4/10),X=v.exp_nspsytune>>14&63,X>=32&&(X-=64),H=Math.pow(10,X/4/10),X=v.exp_nspsytune>>20&63,X>=32&&(X-=64),p=H*Math.pow(10,X/4/10),X=0;X<et.SBMAX_l;X++){var m;X<=6?m=z:X<=13?m=T:X<=20?m=H:m=p,r.nsPsy.longfact[X]=m}for(X=0;X<et.SBMAX_s;X++){var m;X<=5?m=z:X<=10?m=T:X<=11?m=H:m=p,r.nsPsy.shortfact[X]=m}}}},this.on_pe=function(v,r,K,X,z,T){var H=v.internal_flags,p=0,m,l=Cr(2),s,V=new gr(p),_=t.ResvMaxBits(v,X,V,T);p=V.bits;var R=p+_;for(R>lt.MAX_BITS_PER_GRANULE&&(R=lt.MAX_BITS_PER_GRANULE),m=0,s=0;s<H.channels_out;++s)K[s]=Math.min(lt.MAX_BITS_PER_CHANNEL,p/H.channels_out),l[s]=0|K[s]*r[z][s]/700-K[s],l[s]>X*3/4&&(l[s]=X*3/4),l[s]<0&&(l[s]=0),l[s]+K[s]>lt.MAX_BITS_PER_CHANNEL&&(l[s]=Math.max(0,lt.MAX_BITS_PER_CHANNEL-K[s])),m+=l[s];if(m>_)for(s=0;s<H.channels_out;++s)l[s]=_*l[s]/m;for(s=0;s<H.channels_out;++s)K[s]+=l[s],_-=l[s];for(m=0,s=0;s<H.channels_out;++s)m+=K[s];if(m>lt.MAX_BITS_PER_GRANULE){var f=0;for(s=0;s<H.channels_out;++s)K[s]*=lt.MAX_BITS_PER_GRANULE,K[s]/=m,f+=K[s];t0(f<=lt.MAX_BITS_PER_GRANULE)}return R},this.reduce_side=function(v,r,K,X){t0(X<=lt.MAX_BITS_PER_GRANULE),t0(v[0]+v[1]<=lt.MAX_BITS_PER_GRANULE);var z=.33*(.5-r)/.5;z<0&&(z=0),z>.5&&(z=.5);var T=0|z*.5*(v[0]+v[1]);T>lt.MAX_BITS_PER_CHANNEL-v[0]&&(T=lt.MAX_BITS_PER_CHANNEL-v[0]),T<0&&(T=0),v[1]>=125&&(v[1]-T>125?(v[0]<K&&(v[0]+=T),v[1]-=T):(v[0]+=v[1]-125,v[1]=125)),T=v[0]+v[1],T>X&&(v[0]=X*v[0]/T,v[1]=X*v[1]/T),t0(v[0]<=lt.MAX_BITS_PER_CHANNEL),t0(v[1]<=lt.MAX_BITS_PER_CHANNEL),t0(v[0]+v[1]<=lt.MAX_BITS_PER_GRANULE)},this.athAdjust=function(v,r,K){var X=90.30873362,z=94.82444863,T=Ki.FAST_LOG10_X(r,10),H=v*v,p=0;return T-=K,H>1e-20&&(p=1+Ki.FAST_LOG10_X(H,10/X)),p<0&&(p=0),T*=p,T+=K+X-z,Math.pow(10,.1*T)},this.calc_xmin=function(v,r,K,X){var z=0,T=v.internal_flags,H,p=0,m=0,l=T.ATH,s=K.xr,V=v.VBR==Z0.vbr_mtrh?1:0,_=T.masking_lower;for((v.VBR==Z0.vbr_mtrh||v.VBR==Z0.vbr_mt)&&(_=1),H=0;H<K.psy_lmax;H++){var R,f,O,g,N,a;v.VBR==Z0.vbr_rh||v.VBR==Z0.vbr_mtrh?f=athAdjust(l.adjust,l.l[H],l.floor):f=l.adjust*l.l[H],N=K.width[H],O=f/N,g=d,a=N>>1,R=0;do{var c,M;c=s[p]*s[p],R+=c,g+=c<O?c:O,p++,M=s[p]*s[p],R+=M,g+=M<O?M:O,p++}while(--a>0);if(R>f&&m++,H==et.SBPSY_l){var L=f*T.nsPsy.longfact[H];g<L&&(g=L)}if(V!=0&&(f=g),!v.ATHonly){var ee=r.en.l[H];if(ee>0){var L;L=R*r.thm.l[H]*_/ee,V!=0&&(L*=T.nsPsy.longfact[H]),f<L&&(f=L)}}V!=0?X[z++]=f:X[z++]=f*T.nsPsy.longfact[H]}var ae=575;if(K.block_type!=et.SHORT_TYPE)for(var le=576;le--!=0&&BitStream.EQ(s[le],0);)ae=le;K.max_nonzero_coeff=ae;for(var re=K.sfb_smin;H<K.psymax;re++,H+=3){var N,_e,he;for(v.VBR==Z0.vbr_rh||v.VBR==Z0.vbr_mtrh?he=athAdjust(l.adjust,l.s[re],l.floor):he=l.adjust*l.s[re],N=K.width[H],_e=0;_e<3;_e++){var R=0,f,O,g,a=N>>1;O=he/N,g=d;do{var c,M;c=s[p]*s[p],R+=c,g+=c<O?c:O,p++,M=s[p]*s[p],R+=M,g+=M<O?M:O,p++}while(--a>0);if(R>he&&m++,re==et.SBPSY_s){var L=he*T.nsPsy.shortfact[re];g<L&&(g=L)}if(V!=0?f=g:f=he,!v.ATHonly&&!v.ATHshort){var ee=r.en.s[re][_e];if(ee>0){var L;L=R*r.thm.s[re][_e]*_/ee,V!=0&&(L*=T.nsPsy.shortfact[re]),f<L&&(f=L)}}V!=0?X[z++]=f:X[z++]=f*T.nsPsy.shortfact[re]}v.useTemporal&&(X[z-3]>X[z-3+1]&&(X[z-3+1]+=(X[z-3]-X[z-3+1])*T.decay),X[z-3+1]>X[z-3+2]&&(X[z-3+2]+=(X[z-3+1]-X[z-3+2])*T.decay))}return m};function k(v){this.s=v}this.calc_noise_core=function(v,r,K,X){var z=0,T=r.s,H=v.l3_enc;if(T>v.count1)for(;K--!=0;){var p;p=v.xr[T],T++,z+=p*p,p=v.xr[T],T++,z+=p*p}else if(T>v.big_values){var m=X0(2);for(m[0]=0,m[1]=X;K--!=0;){var p;p=Math.abs(v.xr[T])-m[H[T]],T++,z+=p*p,p=Math.abs(v.xr[T])-m[H[T]],T++,z+=p*p}}else for(;K--!=0;){var p;p=Math.abs(v.xr[T])-w[H[T]]*X,T++,z+=p*p,p=Math.abs(v.xr[T])-w[H[T]]*X,T++,z+=p*p}return r.s=T,z},this.calc_noise=function(v,r,K,X,z){var T=0,H=0,p,m,l=0,s=0,V=0,_=-20,R=0,f=v.scalefac,O=0;for(X.over_SSD=0,p=0;p<v.psymax;p++){var g=v.global_gain-(f[O++]+(v.preflag!=0?I[p]:0)<<v.scalefac_scale+1)-v.subblock_gain[v.window[p]]*8,N=0;if(z!=null&&z.step[p]==g)N=z.noise[p],R+=v.width[p],K[T++]=N/r[H++],N=z.noise_log[p];else{var a=n(g);if(m=v.width[p]>>1,R+v.width[p]>v.max_nonzero_coeff){var c;c=v.max_nonzero_coeff-R+1,c>0?m=c>>1:m=0}var M=new k(R);N=this.calc_noise_core(v,M,m,a),R=M.s,z!=null&&(z.step[p]=g,z.noise[p]=N),N=K[T++]=N/r[H++],N=Ki.FAST_LOG10(Math.max(N,1e-20)),z!=null&&(z.noise_log[p]=N)}if(z!=null&&(z.global_gain=v.global_gain),V+=N,N>0){var L;L=Math.max(0|N*10+.5,1),X.over_SSD+=L*L,l++,s+=N}_=Math.max(_,N)}return X.over_count=l,X.tot_noise=V,X.over_noise=s,X.max_noise=_,l},this.set_pinfo=function(v,r,K,X,z){var T=v.internal_flags,H,p,m,l,s,V=r.scalefac_scale==0?.5:1,_=r.scalefac,R=X0(L3Side.SFBMAX),f=X0(L3Side.SFBMAX),O=new CalcNoiseResult;calc_xmin(v,K,r,R),calc_noise(r,R,f,O,null);var g=0;for(p=r.sfb_lmax,r.block_type!=et.SHORT_TYPE&&r.mixed_block_flag==0&&(p=22),H=0;H<p;H++){var N=T.scalefac_band.l[H],a=T.scalefac_band.l[H+1],c=a-N;for(l=0;g<a;g++)l+=r.xr[g]*r.xr[g];l/=c,s=1e15,T.pinfo.en[X][z][H]=s*l,T.pinfo.xfsf[X][z][H]=s*R[H]*f[H]/c,K.en.l[H]>0&&!v.ATHonly?l=l/K.en.l[H]:l=0,T.pinfo.thr[X][z][H]=s*Math.max(l*K.thm.l[H],T.ATH.l[H]),T.pinfo.LAMEsfb[X][z][H]=0,r.preflag!=0&&H>=11&&(T.pinfo.LAMEsfb[X][z][H]=-V*I[H]),H<et.SBPSY_l&&(t0(_[H]>=0),T.pinfo.LAMEsfb[X][z][H]-=V*_[H])}if(r.block_type==et.SHORT_TYPE)for(p=H,H=r.sfb_smin;H<et.SBMAX_s;H++)for(var N=T.scalefac_band.s[H],a=T.scalefac_band.s[H+1],c=a-N,M=0;M<3;M++){for(l=0,m=N;m<a;m++)l+=r.xr[g]*r.xr[g],g++;l=Math.max(l/c,1e-20),s=1e15,T.pinfo.en_s[X][z][3*H+M]=s*l,T.pinfo.xfsf_s[X][z][3*H+M]=s*R[p]*f[p]/c,K.en.s[H][M]>0?l=l/K.en.s[H][M]:l=0,(v.ATHonly||v.ATHshort)&&(l=0),T.pinfo.thr_s[X][z][3*H+M]=s*Math.max(l*K.thm.s[H][M],T.ATH.s[H]),T.pinfo.LAMEsfb_s[X][z][3*H+M]=-2*r.subblock_gain[M],H<et.SBPSY_s&&(T.pinfo.LAMEsfb_s[X][z][3*H+M]-=V*_[p]),p++}T.pinfo.LAMEqss[X][z]=r.global_gain,T.pinfo.LAMEmainbits[X][z]=r.part2_3_length+r.part2_length,T.pinfo.LAMEsfbits[X][z]=r.part2_length,T.pinfo.over[X][z]=O.over_count,T.pinfo.max_noise[X][z]=O.max_noise*10,T.pinfo.over_noise[X][z]=O.over_noise*10,T.pinfo.tot_noise[X][z]=O.tot_noise*10,T.pinfo.over_SSD[X][z]=O.over_SSD}}var Fr=wt,Tt=it,Jr=Tt.System;Tt.VbrMode;Tt.Float;Tt.ShortBlock;Tt.Util;var Er=Tt.Arrays;Tt.new_array_n;Tt.new_byte;Tt.new_double;Tt.new_float;Tt.new_float_n;var N0=Tt.new_int;Tt.new_int_n;var Ct=Tt.assert,Je=bt(),Ee=$i,Nr=an,_0=Fr;function Oi(){var e=null;this.qupvt=null,this.setModules=function(m){this.qupvt=m,e=m};function t(m){this.bits=0|m}var i=[[0,0],[0,0],[0,0],[0,0],[0,0],[0,1],[1,1],[1,1],[1,2],[2,2],[2,3],[2,3],[3,4],[3,4],[3,4],[4,5],[4,5],[4,6],[5,6],[5,6],[5,7],[6,7],[6,7]];function n(m,l,s,V,_,R){var f=.5946/l;for(Ct(m>0),m=m>>1;m--!=0;)_[R++]=f>s[V++]?0:1,_[R++]=f>s[V++]?0:1}function d(m,l,s,V,_,R){Ct(m>0),m=m>>1;var f=m%2;for(m=m>>1;m--!=0;){var O,g,N,a,c,M,L,ee;O=s[V++]*l,g=s[V++]*l,c=0|O,N=s[V++]*l,M=0|g,a=s[V++]*l,L=0|N,O+=e.adj43[c],ee=0|a,g+=e.adj43[M],_[R++]=0|O,N+=e.adj43[L],_[R++]=0|g,a+=e.adj43[ee],_[R++]=0|N,_[R++]=0|a}if(f!=0){var O,g,c,M;O=s[V++]*l,g=s[V++]*l,c=0|O,M=0|g,O+=e.adj43[c],g+=e.adj43[M],_[R++]=0|O,_[R++]=0|g}}function o(m,l,s,V,_){var R,f,O=0,g,N=0,a=0,c=0,M=l,L=0,ee=M,ae=0,le=m,re=0;for(g=_!=null&&V.global_gain==_.global_gain,V.block_type==Je.SHORT_TYPE?f=38:f=21,R=0;R<=f;R++){var _e=-1;if((g||V.block_type==Je.NORM_TYPE)&&(_e=V.global_gain-(V.scalefac[R]+(V.preflag!=0?e.pretab[R]:0)<<V.scalefac_scale+1)-V.subblock_gain[V.window[R]]*8),Ct(V.width[R]>=0),g&&_.step[R]==_e)N!=0&&(d(N,s,le,re,ee,ae),N=0),a!=0&&(n(a,s,le,re,ee,ae),a=0);else{var he=V.width[R];if(O+V.width[R]>V.max_nonzero_coeff){var oe;oe=V.max_nonzero_coeff-O+1,Er.fill(l,V.max_nonzero_coeff,576,0),he=oe,he<0&&(he=0),R=f+1}if(N==0&&a==0&&(ee=M,ae=L,le=m,re=c),_!=null&&_.sfb_count1>0&&R>=_.sfb_count1&&_.step[R]>0&&_e>=_.step[R]?(N!=0&&(d(N,s,le,re,ee,ae),N=0,ee=M,ae=L,le=m,re=c),a+=he):(a!=0&&(n(a,s,le,re,ee,ae),a=0,ee=M,ae=L,le=m,re=c),N+=he),he<=0){a!=0&&(n(a,s,le,re,ee,ae),a=0),N!=0&&(d(N,s,le,re,ee,ae),N=0);break}}R<=f&&(L+=V.width[R],c+=V.width[R],O+=V.width[R])}N!=0&&(d(N,s,le,re,ee,ae),N=0),a!=0&&(n(a,s,le,re,ee,ae),a=0)}function u(m,l,s){var V=0,_=0;do{var R=m[l++],f=m[l++];V<R&&(V=R),_<f&&(_=f)}while(l<s);return V<_&&(V=_),V}function h(m,l,s,V,_,R){var f=Ee.ht[V].xlen*65536+Ee.ht[_].xlen,O=0,g;do{var N=m[l++],a=m[l++];N!=0&&(N>14&&(N=15,O+=f),N*=16),a!=0&&(a>14&&(a=15,O+=f),N+=a),O+=Ee.largetbl[N]}while(l<s);return g=O&65535,O>>=16,O>g&&(O=g,V=_),R.bits+=O,V}function S(m,l,s,V){var _=0,R=Ee.ht[1].hlen;do{var f=m[l+0]*2+m[l+1];l+=2,_+=R[f]}while(l<s);return V.bits+=_,1}function W(m,l,s,V,_){var R=0,f,O=Ee.ht[V].xlen,g;V==2?g=Ee.table23:g=Ee.table56;do{var N=m[l+0]*O+m[l+1];l+=2,R+=g[N]}while(l<s);return f=R&65535,R>>=16,R>f&&(R=f,V++),_.bits+=R,V}function I(m,l,s,V,_){var R=0,f=0,O=0,g=Ee.ht[V].xlen,N=Ee.ht[V].hlen,a=Ee.ht[V+1].hlen,c=Ee.ht[V+2].hlen;do{var M=m[l+0]*g+m[l+1];l+=2,R+=N[M],f+=a[M],O+=c[M]}while(l<s);var L=V;return R>f&&(R=f,L++),R>O&&(R=O,L=V+2),_.bits+=R,L}var Z=[1,2,5,7,7,10,10,13,13,13,13,13,13,13,13];function j(m,l,s,V){var _=u(m,l,s);switch(_){case 0:return _;case 1:return S(m,l,s,V);case 2:case 3:return W(m,l,s,Z[_-1],V);case 4:case 5:case 6:case 7:case 8:case 9:case 10:case 11:case 12:case 13:case 14:case 15:return I(m,l,s,Z[_-1],V);default:if(_>_0.IXMAX_VAL)return V.bits=_0.LARGE_BITS,-1;_-=15;var R;for(R=24;R<32&&!(Ee.ht[R].linmax>=_);R++);var f;for(f=R-8;f<24&&!(Ee.ht[f].linmax>=_);f++);return h(m,l,s,f,R,V)}}this.noquant_count_bits=function(m,l,s){var V=l.l3_enc,_=Math.min(576,l.max_nonzero_coeff+2>>1<<1);for(s!=null&&(s.sfb_count1=0);_>1&&!(V[_-1]|V[_-2]);_-=2);l.count1=_;for(var R=0,f=0;_>3;_-=4){var O;if(((V[_-1]|V[_-2]|V[_-3]|V[_-4])&2147483647)>1)break;O=((V[_-4]*2+V[_-3])*2+V[_-2])*2+V[_-1],R+=Ee.t32l[O],f+=Ee.t33l[O]}var g=R;if(l.count1table_select=0,R>f&&(g=f,l.count1table_select=1),l.count1bits=g,l.big_values=_,_==0)return g;if(l.block_type==Je.SHORT_TYPE)R=3*m.scalefac_band.s[3],R>l.big_values&&(R=l.big_values),f=l.big_values;else if(l.block_type==Je.NORM_TYPE){if(Ct(_<=576),R=l.region0_count=m.bv_scf[_-2],f=l.region1_count=m.bv_scf[_-1],Ct(R+f+2<Je.SBPSY_l),f=m.scalefac_band.l[R+f+2],R=m.scalefac_band.l[R+1],f<_){var N=new t(g);l.table_select[2]=j(V,f,_,N),g=N.bits}}else l.region0_count=7,l.region1_count=Je.SBMAX_l-1-7-1,R=m.scalefac_band.l[8],f=_,R>f&&(R=f);if(R=Math.min(R,_),f=Math.min(f,_),Ct(R>=0),Ct(f>=0),0<R){var N=new t(g);l.table_select[0]=j(V,0,R,N),g=N.bits}if(R<f){var N=new t(g);l.table_select[1]=j(V,R,f,N),g=N.bits}if(m.use_best_huffman==2&&(l.part2_3_length=g,best_huffman_divide(m,l),g=l.part2_3_length),s!=null&&l.block_type==Je.NORM_TYPE){for(var a=0;m.scalefac_band.l[a]<l.big_values;)a++;s.sfb_count1=a}return g},this.count_bits=function(m,l,s,V){var _=s.l3_enc,R=_0.IXMAX_VAL/e.IPOW20(s.global_gain);if(s.xrpow_max>R)return _0.LARGE_BITS;if(o(l,_,e.IPOW20(s.global_gain),s,V),m.substep_shaping&2)for(var f=0,O=s.global_gain+s.scalefac_scale,g=.634521682242439/e.IPOW20(O),N=0;N<s.sfbmax;N++){var a=s.width[N];if(Ct(a>=0),m.pseudohalf[N]==0)f+=a;else{var c;for(c=f,f+=a;c<f;++c)_[c]=l[c]>=g?_[c]:0}}return this.noquant_count_bits(m,s,V)};function w(m,l,s,V,_,R,f){for(var O=l.big_values,g=0;g<=22;g++)V[g]=_0.LARGE_BITS;for(var g=0;g<16;g++){var N=m.scalefac_band.l[g+1];if(N>=O)break;var a=0,c=new t(a),M=j(s,0,N,c);a=c.bits;for(var L=0;L<8;L++){var ee=m.scalefac_band.l[g+L+2];if(ee>=O)break;var ae=a;c=new t(ae);var le=j(s,N,ee,c);ae=c.bits,V[g+L]>ae&&(V[g+L]=ae,_[g+L]=g,R[g+L]=M,f[g+L]=le)}}}function A(m,l,s,V,_,R,f,O){for(var g=l.big_values,N=2;N<Je.SBMAX_l+1;N++){var a=m.scalefac_band.l[N];if(a>=g)break;var c=_[N-2]+l.count1bits;if(s.part2_3_length<=c)break;var M=new t(c),L=j(V,a,g,M);c=M.bits,!(s.part2_3_length<=c)&&(s.assign(l),s.part2_3_length=c,s.region0_count=R[N-2],s.region1_count=N-2-R[N-2],s.table_select[0]=f[N-2],s.table_select[1]=O[N-2],s.table_select[2]=L)}}this.best_huffman_divide=function(m,l){var s=new Nr,V=l.l3_enc,_=N0(23),R=N0(23),f=N0(23),O=N0(23);if(!(l.block_type==Je.SHORT_TYPE&&m.mode_gr==1)){s.assign(l),l.block_type==Je.NORM_TYPE&&(w(m,l,V,_,R,f,O),A(m,s,l,V,_,R,f,O));var g=s.big_values;if(!(g==0||(V[g-2]|V[g-1])>1)&&(g=l.count1+2,!(g>576))){s.assign(l),s.count1=g;var N=0,a=0;for(Ct(g<=576);g>s.big_values;g-=4){var c=((V[g-4]*2+V[g-3])*2+V[g-2])*2+V[g-1];N+=Ee.t32l[c],a+=Ee.t33l[c]}if(s.big_values=g,s.count1table_select=0,N>a&&(N=a,s.count1table_select=1),s.count1bits=N,s.block_type==Je.NORM_TYPE)A(m,s,l,V,_,R,f,O);else{if(s.part2_3_length=N,N=m.scalefac_band.l[8],N>g&&(N=g),N>0){var M=new t(s.part2_3_length);s.table_select[0]=j(V,0,N,M),s.part2_3_length=M.bits}if(g>N){var M=new t(s.part2_3_length);s.table_select[1]=j(V,N,g,M),s.part2_3_length=M.bits}l.part2_3_length>s.part2_3_length&&l.assign(s)}}}};var J=[1,1,1,1,8,2,2,2,4,4,4,8,8,8,16,16],P=[1,2,4,8,1,2,4,8,2,4,8,2,4,8,4,8],k=[0,0,0,0,3,1,1,1,2,2,2,3,3,3,4,4],v=[0,1,2,3,0,1,2,3,1,2,3,1,2,3,2,3];Oi.slen1_tab=k,Oi.slen2_tab=v;function r(m,l){for(var s,V=l.tt[1][m],_=l.tt[0][m],R=0;R<Ee.scfsi_band.length-1;R++){for(s=Ee.scfsi_band[R];s<Ee.scfsi_band[R+1]&&!(_.scalefac[s]!=V.scalefac[s]&&V.scalefac[s]>=0);s++);if(s==Ee.scfsi_band[R+1]){for(s=Ee.scfsi_band[R];s<Ee.scfsi_band[R+1];s++)V.scalefac[s]=-1;l.scfsi[m][R]=1}}var f=0,O=0;for(s=0;s<11;s++)V.scalefac[s]!=-1&&(O++,f<V.scalefac[s]&&(f=V.scalefac[s]));for(var g=0,N=0;s<Je.SBPSY_l;s++)V.scalefac[s]!=-1&&(N++,g<V.scalefac[s]&&(g=V.scalefac[s]));for(var R=0;R<16;R++)if(f<J[R]&&g<P[R]){var a=k[R]*O+v[R]*N;V.part2_length>a&&(V.part2_length=a,V.scalefac_compress=R)}}this.best_scalefac_store=function(m,l,s,V){var _=V.tt[l][s],R,f,O,g,N=0;for(O=0,R=0;R<_.sfbmax;R++){var a=_.width[R];for(Ct(a>=0),O+=a,g=-a;g<0&&_.l3_enc[g+O]==0;g++);g==0&&(_.scalefac[R]=N=-2)}if(_.scalefac_scale==0&&_.preflag==0){var c=0;for(R=0;R<_.sfbmax;R++)_.scalefac[R]>0&&(c|=_.scalefac[R]);if(!(c&1)&&c!=0){for(R=0;R<_.sfbmax;R++)_.scalefac[R]>0&&(_.scalefac[R]>>=1);_.scalefac_scale=N=1}}if(_.preflag==0&&_.block_type!=Je.SHORT_TYPE&&m.mode_gr==2){for(R=11;R<Je.SBPSY_l&&!(_.scalefac[R]<e.pretab[R]&&_.scalefac[R]!=-2);R++);if(R==Je.SBPSY_l){for(R=11;R<Je.SBPSY_l;R++)_.scalefac[R]>0&&(_.scalefac[R]-=e.pretab[R]);_.preflag=N=1}}for(f=0;f<4;f++)V.scfsi[s][f]=0;for(m.mode_gr==2&&l==1&&V.tt[0][s].block_type!=Je.SHORT_TYPE&&V.tt[1][s].block_type!=Je.SHORT_TYPE&&(r(s,V),N=0),R=0;R<_.sfbmax;R++)_.scalefac[R]==-2&&(_.scalefac[R]=0);N!=0&&(m.mode_gr==2?this.scale_bitcount(_):this.scale_bitcount_lsf(m,_))};function K(m,l){for(var s=0;s<l;++s)if(m[s]<0)return!1;return!0}var X=[0,18,36,54,54,36,54,72,54,72,90,72,90,108,108,126],z=[0,18,36,54,51,35,53,71,52,70,88,69,87,105,104,122],T=[0,10,20,30,33,21,31,41,32,42,52,43,53,63,64,74];this.scale_bitcount=function(m){var l,s,V=0,_=0,R,f=m.scalefac;if(Ct(K(f,m.sfbmax)),m.block_type==Je.SHORT_TYPE)R=X,m.mixed_block_flag!=0&&(R=z);else if(R=T,m.preflag==0){for(s=11;s<Je.SBPSY_l&&!(f[s]<e.pretab[s]);s++);if(s==Je.SBPSY_l)for(m.preflag=1,s=11;s<Je.SBPSY_l;s++)f[s]-=e.pretab[s]}for(s=0;s<m.sfbdivide;s++)V<f[s]&&(V=f[s]);for(;s<m.sfbmax;s++)_<f[s]&&(_=f[s]);for(m.part2_length=_0.LARGE_BITS,l=0;l<16;l++)V<J[l]&&_<P[l]&&m.part2_length>R[l]&&(m.part2_length=R[l],m.scalefac_compress=l);return m.part2_length==_0.LARGE_BITS};var H=[[15,15,7,7],[15,15,7,0],[7,3,0,0],[15,31,31,0],[7,7,7,0],[3,3,0,0]];this.scale_bitcount_lsf=function(m,l){var s,V,_,R,f,O,g,N,a=N0(4),c=l.scalefac;for(l.preflag!=0?s=2:s=0,g=0;g<4;g++)a[g]=0;if(l.block_type==Je.SHORT_TYPE){V=1;var M=e.nr_of_sfb_block[s][V];for(N=0,_=0;_<4;_++)for(R=M[_]/3,g=0;g<R;g++,N++)for(f=0;f<3;f++)c[N*3+f]>a[_]&&(a[_]=c[N*3+f])}else{V=0;var M=e.nr_of_sfb_block[s][V];for(N=0,_=0;_<4;_++)for(R=M[_],g=0;g<R;g++,N++)c[N]>a[_]&&(a[_]=c[N])}for(O=!1,_=0;_<4;_++)a[_]>H[s][_]&&(O=!0);if(!O){var L,ee,ae,le;for(l.sfb_partition_table=e.nr_of_sfb_block[s][V],_=0;_<4;_++)l.slen[_]=p[a[_]];switch(L=l.slen[0],ee=l.slen[1],ae=l.slen[2],le=l.slen[3],s){case 0:l.scalefac_compress=(L*5+ee<<4)+(ae<<2)+le;break;case 1:l.scalefac_compress=400+(L*5+ee<<2)+ae;break;case 2:l.scalefac_compress=500+L*3+ee;break;default:Jr.err.printf(`intensity stereo not implemented yet
83
+ `);break}}if(!O)for(Ct(l.sfb_partition_table!=null),l.part2_length=0,_=0;_<4;_++)l.part2_length+=l.slen[_]*l.sfb_partition_table[_];return O};var p=[0,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4];this.huffman_init=function(m){for(var l=2;l<=576;l+=2){for(var s=0,V;m.scalefac_band.l[++s]<l;);for(V=i[s][0];m.scalefac_band.l[V+1]>l;)V--;for(V<0&&(V=i[s][0]),m.bv_scf[l-2]=V,V=i[s][1];m.scalefac_band.l[V+m.bv_scf[l-2]+2]>l;)V--;V<0&&(V=i[s][1]),m.bv_scf[l-1]=V}}}var Pr=Oi,Wt=it,zt=Wt.System;Wt.VbrMode;Wt.Float;Wt.ShortBlock;Wt.Util;var Ur=Wt.Arrays;Wt.new_array_n;var Ar=Wt.new_byte;Wt.new_double;Wt.new_float;var zr=Wt.new_float_n,Or=Wt.new_int;Wt.new_int_n;var Ve=Wt.assert,xs=Pr,Mi=$i,li=bt(),G0=yi;mi.EQ=function(e,t){return Math.abs(e)>Math.abs(t)?Math.abs(e-t)<=Math.abs(e)*1e-6:Math.abs(e-t)<=Math.abs(t)*1e-6};mi.NEQ=function(e,t){return!mi.EQ(e,t)};function mi(){var e=this,t=32773,i=32,n=null,d=null,o=null,u=null;this.setModules=function(p,m,l,s){n=p,d=m,o=l,u=s};var h=null,S=0,W=0,I=0;this.getframebits=function(p){var m=p.internal_flags,l;m.bitrate_index!=0?l=Mi.bitrate_table[p.version][m.bitrate_index]:l=p.brate,Ve(8<=l&&l<=640);var s=0|(p.version+1)*72e3*l/p.out_samplerate+m.padding;return 8*s};function Z(p){zt.arraycopy(p.header[p.w_ptr].buf,0,h,W,p.sideinfo_len),W+=p.sideinfo_len,S+=p.sideinfo_len*8,p.w_ptr=p.w_ptr+1&G0.MAX_HEADER_BUF-1}function j(p,m,l){for(Ve(l<i-2);l>0;){var s;I==0&&(I=8,W++,Ve(W<Lame.LAME_MAXMP3BUFFER),Ve(p.header[p.w_ptr].write_timing>=S),p.header[p.w_ptr].write_timing==S&&Z(p),h[W]=0),s=Math.min(l,I),l-=s,I-=s,Ve(l<i),Ve(I<i),h[W]|=m>>l<<I,S+=s}}function w(p,m,l){for(Ve(l<i-2);l>0;){var s;I==0&&(I=8,W++,Ve(W<Lame.LAME_MAXMP3BUFFER),h[W]=0),s=Math.min(l,I),l-=s,I-=s,Ve(l<i),Ve(I<i),h[W]|=m>>l<<I,S+=s}}function A(p,m){var l=p.internal_flags,s;if(Ve(m>=0),m>=8&&(j(l,76,8),m-=8),m>=8&&(j(l,65,8),m-=8),m>=8&&(j(l,77,8),m-=8),m>=8&&(j(l,69,8),m-=8),m>=32){var V=o.getLameShortVersion();if(m>=32)for(s=0;s<V.length&&m>=8;++s)m-=8,j(l,V.charAt(s),8)}for(;m>=1;m-=1)j(l,l.ancillary_flag,1),l.ancillary_flag^=p.disable_reservoir?0:1;Ve(m==0)}function J(p,m,l){for(var s=p.header[p.h_ptr].ptr;l>0;){var V=Math.min(l,8-(s&7));l-=V,Ve(l<i),p.header[p.h_ptr].buf[s>>3]|=m>>l<<8-(s&7)-V,s+=V}p.header[p.h_ptr].ptr=s}function P(p,m){p<<=8;for(var l=0;l<8;l++)p<<=1,m<<=1,(m^p)&65536&&(m^=t);return m}this.CRC_writeheader=function(p,m){var l=65535;l=P(m[2]&255,l),l=P(m[3]&255,l);for(var s=6;s<p.sideinfo_len;s++)l=P(m[s]&255,l);m[4]=byte(l>>8),m[5]=byte(l&255)};function k(p,m){var l=p.internal_flags,s,V,_;if(s=l.l3_side,l.header[l.h_ptr].ptr=0,Ur.fill(l.header[l.h_ptr].buf,0,l.sideinfo_len,0),p.out_samplerate<16e3?J(l,4094,12):J(l,4095,12),J(l,p.version,1),J(l,1,2),J(l,p.error_protection?0:1,1),J(l,l.bitrate_index,4),J(l,l.samplerate_index,2),J(l,l.padding,1),J(l,p.extension,1),J(l,p.mode.ordinal(),2),J(l,l.mode_ext,2),J(l,p.copyright,1),J(l,p.original,1),J(l,p.emphasis,2),p.error_protection&&J(l,0,16),p.version==1){for(Ve(s.main_data_begin>=0),J(l,s.main_data_begin,9),l.channels_out==2?J(l,s.private_bits,3):J(l,s.private_bits,5),_=0;_<l.channels_out;_++){var R;for(R=0;R<4;R++)J(l,s.scfsi[_][R],1)}for(V=0;V<2;V++)for(_=0;_<l.channels_out;_++){var f=s.tt[V][_];J(l,f.part2_3_length+f.part2_length,12),J(l,f.big_values/2,9),J(l,f.global_gain,8),J(l,f.scalefac_compress,4),f.block_type!=li.NORM_TYPE?(J(l,1,1),J(l,f.block_type,2),J(l,f.mixed_block_flag,1),f.table_select[0]==14&&(f.table_select[0]=16),J(l,f.table_select[0],5),f.table_select[1]==14&&(f.table_select[1]=16),J(l,f.table_select[1],5),J(l,f.subblock_gain[0],3),J(l,f.subblock_gain[1],3),J(l,f.subblock_gain[2],3)):(J(l,0,1),f.table_select[0]==14&&(f.table_select[0]=16),J(l,f.table_select[0],5),f.table_select[1]==14&&(f.table_select[1]=16),J(l,f.table_select[1],5),f.table_select[2]==14&&(f.table_select[2]=16),J(l,f.table_select[2],5),Ve(0<=f.region0_count&&f.region0_count<16),Ve(0<=f.region1_count&&f.region1_count<8),J(l,f.region0_count,4),J(l,f.region1_count,3)),J(l,f.preflag,1),J(l,f.scalefac_scale,1),J(l,f.count1table_select,1)}}else for(Ve(s.main_data_begin>=0),J(l,s.main_data_begin,8),J(l,s.private_bits,l.channels_out),V=0,_=0;_<l.channels_out;_++){var f=s.tt[V][_];J(l,f.part2_3_length+f.part2_length,12),J(l,f.big_values/2,9),J(l,f.global_gain,8),J(l,f.scalefac_compress,9),f.block_type!=li.NORM_TYPE?(J(l,1,1),J(l,f.block_type,2),J(l,f.mixed_block_flag,1),f.table_select[0]==14&&(f.table_select[0]=16),J(l,f.table_select[0],5),f.table_select[1]==14&&(f.table_select[1]=16),J(l,f.table_select[1],5),J(l,f.subblock_gain[0],3),J(l,f.subblock_gain[1],3),J(l,f.subblock_gain[2],3)):(J(l,0,1),f.table_select[0]==14&&(f.table_select[0]=16),J(l,f.table_select[0],5),f.table_select[1]==14&&(f.table_select[1]=16),J(l,f.table_select[1],5),f.table_select[2]==14&&(f.table_select[2]=16),J(l,f.table_select[2],5),Ve(0<=f.region0_count&&f.region0_count<16),Ve(0<=f.region1_count&&f.region1_count<8),J(l,f.region0_count,4),J(l,f.region1_count,3)),J(l,f.scalefac_scale,1),J(l,f.count1table_select,1)}p.error_protection&&CRC_writeheader(l,l.header[l.h_ptr].buf);{var O=l.h_ptr;Ve(l.header[O].ptr==l.sideinfo_len*8),l.h_ptr=O+1&G0.MAX_HEADER_BUF-1,l.header[l.h_ptr].write_timing=l.header[O].write_timing+m,l.h_ptr==l.w_ptr&&zt.err.println(`Error: MAX_HEADER_BUF too small in bitstream.c
84
+ `)}}function v(p,m){var l=Mi.ht[m.count1table_select+32],s,V=0,_=m.big_values,R=m.big_values;for(Ve(m.count1table_select<2),s=(m.count1-m.big_values)/4;s>0;--s){var f=0,O=0,g;g=m.l3_enc[_+0],g!=0&&(O+=8,m.xr[R+0]<0&&f++,Ve(g<=1)),g=m.l3_enc[_+1],g!=0&&(O+=4,f*=2,m.xr[R+1]<0&&f++,Ve(g<=1)),g=m.l3_enc[_+2],g!=0&&(O+=2,f*=2,m.xr[R+2]<0&&f++,Ve(g<=1)),g=m.l3_enc[_+3],g!=0&&(O++,f*=2,m.xr[R+3]<0&&f++,Ve(g<=1)),_+=4,R+=4,j(p,f+l.table[O],l.hlen[O]),V+=l.hlen[O]}return V}function r(p,m,l,s,V){var _=Mi.ht[m],R=0;if(Ve(m<32),m==0)return R;for(var f=l;f<s;f+=2){var O=0,g=0,N=_.xlen,a=_.xlen,c=0,M=V.l3_enc[f],L=V.l3_enc[f+1];if(M!=0&&(V.xr[f]<0&&c++,O--),m>15){if(M>14){var ee=M-15;Ve(ee<=_.linmax),c|=ee<<1,g=N,M=15}if(L>14){var ae=L-15;Ve(ae<=_.linmax),c<<=N,c|=ae,g+=N,L=15}a=16}L!=0&&(c<<=1,V.xr[f+1]<0&&c++,O--),Ve((M|L)<16),M=M*a+L,g-=O,O+=_.hlen[M],Ve(O<=i),Ve(g<=i),j(p,_.table[M],O),j(p,c,g),R+=O+g}return R}function K(p,m){var l=3*p.scalefac_band.s[3];l>m.big_values&&(l=m.big_values);var s=r(p,m.table_select[0],0,l,m);return s+=r(p,m.table_select[1],l,m.big_values,m),s}function X(p,m){var l,s,V,_;l=m.big_values,Ve(0<=l&&l<=576);var R=m.region0_count+1;return Ve(0<=R),Ve(R<p.scalefac_band.l.length),V=p.scalefac_band.l[R],R+=m.region1_count+1,Ve(0<=R),Ve(R<p.scalefac_band.l.length),_=p.scalefac_band.l[R],V>l&&(V=l),_>l&&(_=l),s=r(p,m.table_select[0],0,V,m),s+=r(p,m.table_select[1],V,_,m),s+=r(p,m.table_select[2],_,l,m),s}function z(p){var m,l,s,V,_=0,R=p.internal_flags,f=R.l3_side;if(p.version==1)for(m=0;m<2;m++)for(l=0;l<R.channels_out;l++){var O=f.tt[m][l],g=xs.slen1_tab[O.scalefac_compress],N=xs.slen2_tab[O.scalefac_compress];for(V=0,s=0;s<O.sfbdivide;s++)O.scalefac[s]!=-1&&(j(R,O.scalefac[s],g),V+=g);for(;s<O.sfbmax;s++)O.scalefac[s]!=-1&&(j(R,O.scalefac[s],N),V+=N);Ve(V==O.part2_length),O.block_type==li.SHORT_TYPE?V+=K(R,O):V+=X(R,O),V+=v(R,O),Ve(V==O.part2_3_length+O.part2_length),_+=V}else for(m=0,l=0;l<R.channels_out;l++){var O=f.tt[m][l],a,c,M=0;if(Ve(O.sfb_partition_table!=null),V=0,s=0,c=0,O.block_type==li.SHORT_TYPE){for(;c<4;c++){var L=O.sfb_partition_table[c]/3,ee=O.slen[c];for(a=0;a<L;a++,s++)j(R,Math.max(O.scalefac[s*3+0],0),ee),j(R,Math.max(O.scalefac[s*3+1],0),ee),j(R,Math.max(O.scalefac[s*3+2],0),ee),M+=3*ee}V+=K(R,O)}else{for(;c<4;c++){var L=O.sfb_partition_table[c],ee=O.slen[c];for(a=0;a<L;a++,s++)j(R,Math.max(O.scalefac[s],0),ee),M+=ee}V+=X(R,O)}V+=v(R,O),Ve(V==O.part2_3_length),Ve(M==O.part2_length),_+=M+V}return _}function T(){this.total=0}function H(p,m){var l=p.internal_flags,s,V,_,R,f;return f=l.w_ptr,R=l.h_ptr-1,R==-1&&(R=G0.MAX_HEADER_BUF-1),s=l.header[R].write_timing-S,m.total=s,s>=0&&(V=1+R-f,R<f&&(V=1+R-f+G0.MAX_HEADER_BUF),s-=V*8*l.sideinfo_len),_=e.getframebits(p),s+=_,m.total+=_,m.total%8!=0?m.total=1+m.total/8:m.total=m.total/8,m.total+=W+1,s<0&&zt.err.println(`strange error flushing buffer ...
85
+ `),s}this.flush_bitstream=function(p){var m=p.internal_flags,l,s,V=m.h_ptr-1;if(V==-1&&(V=G0.MAX_HEADER_BUF-1),l=m.l3_side,!((s=H(p,new T))<0)){if(A(p,s),Ve(m.header[V].write_timing+this.getframebits(p)==S),m.ResvSize=0,l.main_data_begin=0,m.findReplayGain){var _=n.GetTitleGain(m.rgdata);Ve(NEQ(_,GainAnalysis.GAIN_NOT_ENOUGH_SAMPLES)),m.RadioGain=Math.floor(_*10+.5)|0}m.findPeakSample&&(m.noclipGainChange=Math.ceil(Math.log10(m.PeakSample/32767)*20*10)|0,m.noclipGainChange>0&&(EQ(p.scale,1)||EQ(p.scale,0))?m.noclipScale=Math.floor(32767/m.PeakSample*100)/100:m.noclipScale=-1)}},this.add_dummy_byte=function(p,m,l){for(var s=p.internal_flags,V;l-- >0;)for(w(s,m,8),V=0;V<G0.MAX_HEADER_BUF;++V)s.header[V].write_timing+=8},this.format_bitstream=function(p){var m=p.internal_flags,l;l=m.l3_side;var s=this.getframebits(p);A(p,l.resvDrain_pre),k(p,s);var V=8*m.sideinfo_len;if(V+=z(p),A(p,l.resvDrain_post),V+=l.resvDrain_post,l.main_data_begin+=(s-V)/8,H(p,new T)!=m.ResvSize&&zt.err.println("Internal buffer inconsistency. flushbits <> ResvSize"),l.main_data_begin*8!=m.ResvSize&&(zt.err.printf(`bit reservoir error:
86
+ l3_side.main_data_begin: %d
87
+ Resvoir size: %d
88
+ resv drain (post) %d
89
+ resv drain (pre) %d
90
+ header and sideinfo: %d
91
+ data bits: %d
92
+ total bits: %d (remainder: %d)
93
+ bitsperframe: %d
94
+ `,8*l.main_data_begin,m.ResvSize,l.resvDrain_post,l.resvDrain_pre,8*m.sideinfo_len,V-l.resvDrain_post-8*m.sideinfo_len,V,V%8,s),zt.err.println("This is a fatal error. It has several possible causes:"),zt.err.println("90%% LAME compiled with buggy version of gcc using advanced optimizations"),zt.err.println(" 9%% Your system is overclocked"),zt.err.println(" 1%% bug in LAME encoding library"),m.ResvSize=l.main_data_begin*8),Ve(S%8==0),S>1e9){var _;for(_=0;_<G0.MAX_HEADER_BUF;++_)m.header[_].write_timing-=S;S=0}return 0},this.copy_buffer=function(p,m,l,s,V){var _=W+1;if(_<=0)return 0;if(s!=0&&_>s)return-1;if(zt.arraycopy(h,0,m,l,_),W=-1,I=0,V!=0){var R=Or(1);if(R[0]=p.nMusicCRC,u.updateMusicCRC(R,m,l,_),p.nMusicCRC=R[0],_>0&&(p.VBR_seek_table.nBytesWritten+=_),p.decode_on_the_fly){for(var f=zr([2,1152]),O=_,g=-1,N;g!=0;)if(g=d.hip_decode1_unclipped(p.hip,m,l,O,f[0],f[1]),O=0,g==-1&&(g=0),g>0){if(Ve(g<=1152),p.findPeakSample){for(N=0;N<g;N++)f[0][N]>p.PeakSample?p.PeakSample=f[0][N]:-f[0][N]>p.PeakSample&&(p.PeakSample=-f[0][N]);if(p.channels_out>1)for(N=0;N<g;N++)f[1][N]>p.PeakSample?p.PeakSample=f[1][N]:-f[1][N]>p.PeakSample&&(p.PeakSample=-f[1][N])}if(p.findReplayGain&&n.AnalyzeSamples(p.rgdata,f[0],0,f[1],0,g,p.channels_out)==GainAnalysis.GAIN_ANALYSIS_ERROR)return-6}}}return _},this.init_bit_stream_w=function(p){h=Ar(Lame.LAME_MAXMP3BUFFER),p.h_ptr=p.w_ptr=0,p.header[p.h_ptr].write_timing=0,W=-1,I=0,S=0}}var cn=mi;const jr=bi(cn);var ot=it,Qr=ot.System,Me=ot.VbrMode;ot.Float;var ki=ot.ShortBlock;ot.Util;ot.Arrays;ot.new_array_n;ot.new_byte;ot.new_double;var S0=ot.new_float;ot.new_float_n;ot.new_int;var Hs=ot.new_int_n,Dr=ot.new_short_n,Yt=ot.assert,Bi=ir,$r=rr,P0=yi,qr=Tr,ea=xr,ta=Br,v0=cn,Ot=$i,Ne=bt();function Qe(){var e=this,t=128*1024;Qe.V9=410,Qe.V8=420,Qe.V7=430,Qe.V6=440,Qe.V5=450,Qe.V4=460,Qe.V3=470,Qe.V2=480,Qe.V1=490,Qe.V0=500,Qe.R3MIX=1e3,Qe.STANDARD=1001,Qe.EXTREME=1002,Qe.INSANE=1003,Qe.STANDARD_FAST=1004,Qe.EXTREME_FAST=1005,Qe.MEDIUM=1006,Qe.MEDIUM_FAST=1007;var i=16384+t;Qe.LAME_MAXMP3BUFFER=i;var n,d,o,u,h,S=new Bi,W,I,Z;this.enc=new Ne,this.setModules=function(a,c,M,L,ee,ae,le,re,_e){n=a,d=c,o=M,u=L,h=ee,W=ae,I=re,Z=_e,this.enc.setModules(d,S,u,W)};function j(){this.mask_adjust=0,this.mask_adjust_short=0,this.bo_l_weight=S0(Ne.SBMAX_l),this.bo_s_weight=S0(Ne.SBMAX_s)}function w(){this.lowerlimit=0}function A(a,c){this.lowpass=c}var J=4294479419;function P(a){var c;return a.class_id=J,c=a.internal_flags=new P0,a.mode=MPEGMode.NOT_SET,a.original=1,a.in_samplerate=44100,a.num_channels=2,a.num_samples=-1,a.bWriteVbrTag=!0,a.quality=-1,a.short_blocks=null,c.subblock_gain=-1,a.lowpassfreq=0,a.highpassfreq=0,a.lowpasswidth=-1,a.highpasswidth=-1,a.VBR=Me.vbr_off,a.VBR_q=4,a.ATHcurve=-1,a.VBR_mean_bitrate_kbps=128,a.VBR_min_bitrate_kbps=0,a.VBR_max_bitrate_kbps=0,a.VBR_hard_min=0,c.VBR_min_bitrate=1,c.VBR_max_bitrate=13,a.quant_comp=-1,a.quant_comp_short=-1,a.msfix=-1,c.resample_ratio=1,c.OldValue[0]=180,c.OldValue[1]=180,c.CurrentStep[0]=4,c.CurrentStep[1]=4,c.masking_lower=1,c.nsPsy.attackthre=-1,c.nsPsy.attackthre_s=-1,a.scale=-1,a.athaa_type=-1,a.ATHtype=-1,a.athaa_loudapprox=-1,a.athaa_sensitivity=0,a.useTemporal=null,a.interChRatio=-1,c.mf_samples_to_encode=Ne.ENCDELAY+Ne.POSTDELAY,a.encoder_padding=0,c.mf_size=Ne.ENCDELAY-Ne.MDCTDELAY,a.findReplayGain=!1,a.decode_on_the_fly=!1,c.decode_on_the_fly=!1,c.findReplayGain=!1,c.findPeakSample=!1,c.RadioGain=0,c.AudiophileGain=0,c.noclipGainChange=0,c.noclipScale=-1,a.preset=0,a.write_id3tag_automatic=!0,0}this.lame_init=function(){var a=new $r;return P(a),a.lame_allocated_gfp=1,a};function k(a){return a>1?0:a<=0?1:Math.cos(Math.PI/2*a)}this.nearestBitrateFullIndex=function(a){var c=[8,16,24,32,40,48,56,64,80,96,112,128,160,192,224,256,320],M=0,L=0,ee=0,ae=0;ae=c[16],ee=16,L=c[16],M=16;for(var le=0;le<16;le++)if(Math.max(a,c[le+1])!=a){ae=c[le+1],ee=le+1,L=c[le],M=le;break}return ae-a>a-L?M:ee};function v(a,c){var M=44100;return c>=48e3?M=48e3:c>=44100?M=44100:c>=32e3?M=32e3:c>=24e3?M=24e3:c>=22050?M=22050:c>=16e3?M=16e3:c>=12e3?M=12e3:c>=11025?M=11025:c>=8e3&&(M=8e3),a==-1?M:(a<=15960&&(M=44100),a<=15250&&(M=32e3),a<=11220&&(M=24e3),a<=9970&&(M=22050),a<=7230&&(M=16e3),a<=5420&&(M=12e3),a<=4510&&(M=11025),a<=3970&&(M=8e3),c<M?c>44100?48e3:c>32e3?44100:c>24e3?32e3:c>22050?24e3:c>16e3?22050:c>12e3?16e3:c>11025?12e3:c>8e3?11025:8e3:M)}function r(a,c){switch(a){case 44100:return c.version=1,0;case 48e3:return c.version=1,1;case 32e3:return c.version=1,2;case 22050:return c.version=0,0;case 24e3:return c.version=0,1;case 16e3:return c.version=0,2;case 11025:return c.version=0,0;case 12e3:return c.version=0,1;case 8e3:return c.version=0,2;default:return c.version=0,-1}}function K(a,c,M){M<16e3&&(c=2);for(var L=Ot.bitrate_table[c][1],ee=2;ee<=14;ee++)Ot.bitrate_table[c][ee]>0&&Math.abs(Ot.bitrate_table[c][ee]-a)<Math.abs(L-a)&&(L=Ot.bitrate_table[c][ee]);return L}function X(a,c,M){M<16e3&&(c=2);for(var L=0;L<=14;L++)if(Ot.bitrate_table[c][L]>0&&Ot.bitrate_table[c][L]==a)return L;return-1}function z(a,c){var M=[new A(8,2e3),new A(16,3700),new A(24,3900),new A(32,5500),new A(40,7e3),new A(48,7500),new A(56,1e4),new A(64,11e3),new A(80,13500),new A(96,15100),new A(112,15600),new A(128,17e3),new A(160,17500),new A(192,18600),new A(224,19400),new A(256,19700),new A(320,20500)],L=e.nearestBitrateFullIndex(c);a.lowerlimit=M[L].lowpass}function T(a){var c=a.internal_flags,M=32,L=-1;if(c.lowpass1>0){for(var ee=999,ae=0;ae<=31;ae++){var le=ae/31;le>=c.lowpass2&&(M=Math.min(M,ae)),c.lowpass1<le&&le<c.lowpass2&&(ee=Math.min(ee,ae))}ee==999?c.lowpass1=(M-.75)/31:c.lowpass1=(ee-.75)/31,c.lowpass2=M/31}if(c.highpass2>0&&c.highpass2<.9*(.75/31)&&(c.highpass1=0,c.highpass2=0,Qr.err.println(`Warning: highpass filter disabled. highpass frequency too small
95
+ `)),c.highpass2>0){for(var re=-1,ae=0;ae<=31;ae++){var le=ae/31;le<=c.highpass1&&(L=Math.max(L,ae)),c.highpass1<le&&le<c.highpass2&&(re=Math.max(re,ae))}c.highpass1=L/31,re==-1?c.highpass2=(L+.75)/31:c.highpass2=(re+.75)/31}for(var ae=0;ae<32;ae++){var _e,he,le=ae/31;c.highpass2>c.highpass1?_e=k((c.highpass2-le)/(c.highpass2-c.highpass1+1e-20)):_e=1,c.lowpass2>c.lowpass1?he=k((le-c.lowpass1)/(c.lowpass2-c.lowpass1+1e-20)):he=1,c.amp_filter[ae]=_e*he}}function H(a){var c=a.internal_flags;switch(a.quality){default:case 9:c.psymodel=0,c.noise_shaping=0,c.noise_shaping_amp=0,c.noise_shaping_stop=0,c.use_best_huffman=0,c.full_outer_loop=0;break;case 8:a.quality=7;case 7:c.psymodel=1,c.noise_shaping=0,c.noise_shaping_amp=0,c.noise_shaping_stop=0,c.use_best_huffman=0,c.full_outer_loop=0;break;case 6:c.psymodel=1,c.noise_shaping==0&&(c.noise_shaping=1),c.noise_shaping_amp=0,c.noise_shaping_stop=0,c.subblock_gain==-1&&(c.subblock_gain=1),c.use_best_huffman=0,c.full_outer_loop=0;break;case 5:c.psymodel=1,c.noise_shaping==0&&(c.noise_shaping=1),c.noise_shaping_amp=0,c.noise_shaping_stop=0,c.subblock_gain==-1&&(c.subblock_gain=1),c.use_best_huffman=0,c.full_outer_loop=0;break;case 4:c.psymodel=1,c.noise_shaping==0&&(c.noise_shaping=1),c.noise_shaping_amp=0,c.noise_shaping_stop=0,c.subblock_gain==-1&&(c.subblock_gain=1),c.use_best_huffman=1,c.full_outer_loop=0;break;case 3:c.psymodel=1,c.noise_shaping==0&&(c.noise_shaping=1),c.noise_shaping_amp=1,c.noise_shaping_stop=1,c.subblock_gain==-1&&(c.subblock_gain=1),c.use_best_huffman=1,c.full_outer_loop=0;break;case 2:c.psymodel=1,c.noise_shaping==0&&(c.noise_shaping=1),c.substep_shaping==0&&(c.substep_shaping=2),c.noise_shaping_amp=1,c.noise_shaping_stop=1,c.subblock_gain==-1&&(c.subblock_gain=1),c.use_best_huffman=1,c.full_outer_loop=0;break;case 1:c.psymodel=1,c.noise_shaping==0&&(c.noise_shaping=1),c.substep_shaping==0&&(c.substep_shaping=2),c.noise_shaping_amp=2,c.noise_shaping_stop=1,c.subblock_gain==-1&&(c.subblock_gain=1),c.use_best_huffman=1,c.full_outer_loop=0;break;case 0:c.psymodel=1,c.noise_shaping==0&&(c.noise_shaping=1),c.substep_shaping==0&&(c.substep_shaping=2),c.noise_shaping_amp=2,c.noise_shaping_stop=1,c.subblock_gain==-1&&(c.subblock_gain=1),c.use_best_huffman=1,c.full_outer_loop=0;break}}function p(a){var c=a.internal_flags;a.frameNum=0,a.write_id3tag_automatic&&I.id3tag_write_v2(a),c.bitrate_stereoMode_Hist=Hs([16,5]),c.bitrate_blockType_Hist=Hs([16,6]),c.PeakSample=0,a.bWriteVbrTag&&W.InitVbrTag(a)}this.lame_init_params=function(a){var c=a.internal_flags;if(c.Class_ID=0,c.ATH==null&&(c.ATH=new qr),c.PSY==null&&(c.PSY=new j),c.rgdata==null&&(c.rgdata=new ea),c.channels_in=a.num_channels,c.channels_in==1&&(a.mode=MPEGMode.MONO),c.channels_out=a.mode==MPEGMode.MONO?1:2,c.mode_ext=Ne.MPG_MD_MS_LR,a.mode==MPEGMode.MONO&&(a.force_ms=!1),a.VBR==Me.vbr_off&&a.VBR_mean_bitrate_kbps!=128&&a.brate==0&&(a.brate=a.VBR_mean_bitrate_kbps),a.VBR==Me.vbr_off||a.VBR==Me.vbr_mtrh||a.VBR==Me.vbr_mt||(a.free_format=!1),a.VBR==Me.vbr_off&&a.brate==0&&v0.EQ(a.compression_ratio,0)&&(a.compression_ratio=11.025),a.VBR==Me.vbr_off&&a.compression_ratio>0&&(a.out_samplerate==0&&(a.out_samplerate=map2MP3Frequency(int(.97*a.in_samplerate))),a.brate=0|a.out_samplerate*16*c.channels_out/(1e3*a.compression_ratio),c.samplerate_index=r(a.out_samplerate,a),a.free_format||(a.brate=K(a.brate,a.version,a.out_samplerate))),a.out_samplerate!=0&&(a.out_samplerate<16e3?(a.VBR_mean_bitrate_kbps=Math.max(a.VBR_mean_bitrate_kbps,8),a.VBR_mean_bitrate_kbps=Math.min(a.VBR_mean_bitrate_kbps,64)):a.out_samplerate<32e3?(a.VBR_mean_bitrate_kbps=Math.max(a.VBR_mean_bitrate_kbps,8),a.VBR_mean_bitrate_kbps=Math.min(a.VBR_mean_bitrate_kbps,160)):(a.VBR_mean_bitrate_kbps=Math.max(a.VBR_mean_bitrate_kbps,32),a.VBR_mean_bitrate_kbps=Math.min(a.VBR_mean_bitrate_kbps,320))),a.lowpassfreq==0){var M=16e3;switch(a.VBR){case Me.vbr_off:{var L=new w;z(L,a.brate),M=L.lowerlimit;break}case Me.vbr_abr:{var L=new w;z(L,a.VBR_mean_bitrate_kbps),M=L.lowerlimit;break}case Me.vbr_rh:{var ee=[19500,19e3,18600,18e3,17500,16e3,15600,14900,12500,1e4,3950];if(0<=a.VBR_q&&a.VBR_q<=9){var ae=ee[a.VBR_q],le=ee[a.VBR_q+1],re=a.VBR_q_frac;M=linear_int(ae,le,re)}else M=19500;break}default:{var ee=[19500,19e3,18500,18e3,17500,16500,15500,14500,12500,9500,3950];if(0<=a.VBR_q&&a.VBR_q<=9){var ae=ee[a.VBR_q],le=ee[a.VBR_q+1],re=a.VBR_q_frac;M=linear_int(ae,le,re)}else M=19500}}a.mode==MPEGMode.MONO&&(a.VBR==Me.vbr_off||a.VBR==Me.vbr_abr)&&(M*=1.5),a.lowpassfreq=M|0}if(a.out_samplerate==0&&(2*a.lowpassfreq>a.in_samplerate&&(a.lowpassfreq=a.in_samplerate/2),a.out_samplerate=v(a.lowpassfreq|0,a.in_samplerate)),a.lowpassfreq=Math.min(20500,a.lowpassfreq),a.lowpassfreq=Math.min(a.out_samplerate/2,a.lowpassfreq),a.VBR==Me.vbr_off&&(a.compression_ratio=a.out_samplerate*16*c.channels_out/(1e3*a.brate)),a.VBR==Me.vbr_abr&&(a.compression_ratio=a.out_samplerate*16*c.channels_out/(1e3*a.VBR_mean_bitrate_kbps)),a.bWriteVbrTag||(a.findReplayGain=!1,a.decode_on_the_fly=!1,c.findPeakSample=!1),c.findReplayGain=a.findReplayGain,c.decode_on_the_fly=a.decode_on_the_fly,c.decode_on_the_fly&&(c.findPeakSample=!0),c.findReplayGain&&n.InitGainAnalysis(c.rgdata,a.out_samplerate)==GainAnalysis.INIT_GAIN_ANALYSIS_ERROR)return a.internal_flags=null,-6;switch(c.decode_on_the_fly&&!a.decode_only&&(c.hip!=null&&Z.hip_decode_exit(c.hip),c.hip=Z.hip_decode_init()),c.mode_gr=a.out_samplerate<=24e3?1:2,a.framesize=576*c.mode_gr,a.encoder_delay=Ne.ENCDELAY,c.resample_ratio=a.in_samplerate/a.out_samplerate,a.VBR){case Me.vbr_mt:case Me.vbr_rh:case Me.vbr_mtrh:{var _e=[5.7,6.5,7.3,8.2,10,11.9,13,14,15,16.5];a.compression_ratio=_e[a.VBR_q]}break;case Me.vbr_abr:a.compression_ratio=a.out_samplerate*16*c.channels_out/(1e3*a.VBR_mean_bitrate_kbps);break;default:a.compression_ratio=a.out_samplerate*16*c.channels_out/(1e3*a.brate);break}if(a.mode==MPEGMode.NOT_SET&&(a.mode=MPEGMode.JOINT_STEREO),a.highpassfreq>0?(c.highpass1=2*a.highpassfreq,a.highpasswidth>=0?c.highpass2=2*(a.highpassfreq+a.highpasswidth):c.highpass2=1*2*a.highpassfreq,c.highpass1/=a.out_samplerate,c.highpass2/=a.out_samplerate):(c.highpass1=0,c.highpass2=0),a.lowpassfreq>0?(c.lowpass2=2*a.lowpassfreq,a.lowpasswidth>=0?(c.lowpass1=2*(a.lowpassfreq-a.lowpasswidth),c.lowpass1<0&&(c.lowpass1=0)):c.lowpass1=1*2*a.lowpassfreq,c.lowpass1/=a.out_samplerate,c.lowpass2/=a.out_samplerate):(c.lowpass1=0,c.lowpass2=0),T(a),c.samplerate_index=r(a.out_samplerate,a),c.samplerate_index<0)return a.internal_flags=null,-1;if(a.VBR==Me.vbr_off){if(a.free_format)c.bitrate_index=0;else if(a.brate=K(a.brate,a.version,a.out_samplerate),c.bitrate_index=X(a.brate,a.version,a.out_samplerate),c.bitrate_index<=0)return a.internal_flags=null,-1}else c.bitrate_index=1;a.analysis&&(a.bWriteVbrTag=!1),c.pinfo!=null&&(a.bWriteVbrTag=!1),d.init_bit_stream_w(c);for(var he=c.samplerate_index+3*a.version+6*(a.out_samplerate<16e3?1:0),oe=0;oe<Ne.SBMAX_l+1;oe++)c.scalefac_band.l[oe]=u.sfBandIndex[he].l[oe];for(var oe=0;oe<Ne.PSFB21+1;oe++){var Le=(c.scalefac_band.l[22]-c.scalefac_band.l[21])/Ne.PSFB21,Ae=c.scalefac_band.l[21]+oe*Le;c.scalefac_band.psfb21[oe]=Ae}c.scalefac_band.psfb21[Ne.PSFB21]=576;for(var oe=0;oe<Ne.SBMAX_s+1;oe++)c.scalefac_band.s[oe]=u.sfBandIndex[he].s[oe];for(var oe=0;oe<Ne.PSFB12+1;oe++){var Le=(c.scalefac_band.s[13]-c.scalefac_band.s[12])/Ne.PSFB12,Ae=c.scalefac_band.s[12]+oe*Le;c.scalefac_band.psfb12[oe]=Ae}c.scalefac_band.psfb12[Ne.PSFB12]=192,a.version==1?c.sideinfo_len=c.channels_out==1?21:36:c.sideinfo_len=c.channels_out==1?13:21,a.error_protection&&(c.sideinfo_len+=2),p(a),c.Class_ID=J;{var We;for(We=0;We<19;We++)c.nsPsy.pefirbuf[We]=700*c.mode_gr*c.channels_out;a.ATHtype==-1&&(a.ATHtype=4)}switch(Yt(a.VBR_q<=9),Yt(a.VBR_q>=0),a.VBR){case Me.vbr_mt:a.VBR=Me.vbr_mtrh;case Me.vbr_mtrh:{a.useTemporal==null&&(a.useTemporal=!1),o.apply_preset(a,500-a.VBR_q*10,0),a.quality<0&&(a.quality=LAME_DEFAULT_QUALITY),a.quality<5&&(a.quality=0),a.quality>5&&(a.quality=5),c.PSY.mask_adjust=a.maskingadjust,c.PSY.mask_adjust_short=a.maskingadjust_short,a.experimentalY?c.sfb21_extra=!1:c.sfb21_extra=a.out_samplerate>44e3,c.iteration_loop=new VBRNewIterationLoop(h);break}case Me.vbr_rh:{o.apply_preset(a,500-a.VBR_q*10,0),c.PSY.mask_adjust=a.maskingadjust,c.PSY.mask_adjust_short=a.maskingadjust_short,a.experimentalY?c.sfb21_extra=!1:c.sfb21_extra=a.out_samplerate>44e3,a.quality>6&&(a.quality=6),a.quality<0&&(a.quality=LAME_DEFAULT_QUALITY),c.iteration_loop=new VBROldIterationLoop(h);break}default:{var we;c.sfb21_extra=!1,a.quality<0&&(a.quality=LAME_DEFAULT_QUALITY),we=a.VBR,we==Me.vbr_off&&(a.VBR_mean_bitrate_kbps=a.brate),o.apply_preset(a,a.VBR_mean_bitrate_kbps,0),a.VBR=we,c.PSY.mask_adjust=a.maskingadjust,c.PSY.mask_adjust_short=a.maskingadjust_short,we==Me.vbr_off?c.iteration_loop=new ta(h):c.iteration_loop=new ABRIterationLoop(h);break}}if(Yt(a.scale>=0),a.VBR!=Me.vbr_off){if(c.VBR_min_bitrate=1,c.VBR_max_bitrate=14,a.out_samplerate<16e3&&(c.VBR_max_bitrate=8),a.VBR_min_bitrate_kbps!=0&&(a.VBR_min_bitrate_kbps=K(a.VBR_min_bitrate_kbps,a.version,a.out_samplerate),c.VBR_min_bitrate=X(a.VBR_min_bitrate_kbps,a.version,a.out_samplerate),c.VBR_min_bitrate<0)||a.VBR_max_bitrate_kbps!=0&&(a.VBR_max_bitrate_kbps=K(a.VBR_max_bitrate_kbps,a.version,a.out_samplerate),c.VBR_max_bitrate=X(a.VBR_max_bitrate_kbps,a.version,a.out_samplerate),c.VBR_max_bitrate<0))return-1;a.VBR_min_bitrate_kbps=Ot.bitrate_table[a.version][c.VBR_min_bitrate],a.VBR_max_bitrate_kbps=Ot.bitrate_table[a.version][c.VBR_max_bitrate],a.VBR_mean_bitrate_kbps=Math.min(Ot.bitrate_table[a.version][c.VBR_max_bitrate],a.VBR_mean_bitrate_kbps),a.VBR_mean_bitrate_kbps=Math.max(Ot.bitrate_table[a.version][c.VBR_min_bitrate],a.VBR_mean_bitrate_kbps)}return a.tune&&(c.PSY.mask_adjust+=a.tune_value_a,c.PSY.mask_adjust_short+=a.tune_value_a),H(a),Yt(a.scale>=0),a.athaa_type<0?c.ATH.useAdjust=3:c.ATH.useAdjust=a.athaa_type,c.ATH.aaSensitivityP=Math.pow(10,a.athaa_sensitivity/-10),a.short_blocks==null&&(a.short_blocks=ki.short_block_allowed),a.short_blocks==ki.short_block_allowed&&(a.mode==MPEGMode.JOINT_STEREO||a.mode==MPEGMode.STEREO)&&(a.short_blocks=ki.short_block_coupled),a.quant_comp<0&&(a.quant_comp=1),a.quant_comp_short<0&&(a.quant_comp_short=0),a.msfix<0&&(a.msfix=0),a.exp_nspsytune=a.exp_nspsytune|1,a.internal_flags.nsPsy.attackthre<0&&(a.internal_flags.nsPsy.attackthre=Bi.NSATTACKTHRE),a.internal_flags.nsPsy.attackthre_s<0&&(a.internal_flags.nsPsy.attackthre_s=Bi.NSATTACKTHRE_S),Yt(a.scale>=0),a.scale<0&&(a.scale=1),a.ATHtype<0&&(a.ATHtype=4),a.ATHcurve<0&&(a.ATHcurve=4),a.athaa_loudapprox<0&&(a.athaa_loudapprox=2),a.interChRatio<0&&(a.interChRatio=0),a.useTemporal==null&&(a.useTemporal=!0),c.slot_lag=c.frac_SpF=0,a.VBR==Me.vbr_off&&(c.slot_lag=c.frac_SpF=(a.version+1)*72e3*a.brate%a.out_samplerate|0),u.iteration_init(a),S.psymodel_init(a),Yt(a.scale>=0),0};function m(a,c){(a.in_buffer_0==null||a.in_buffer_nsamples<c)&&(a.in_buffer_0=S0(c),a.in_buffer_1=S0(c),a.in_buffer_nsamples=c)}this.lame_encode_flush=function(a,c,M,L){var ee=a.internal_flags,ae=Dr([2,1152]),le=0,re,_e,he,oe,Le=ee.mf_samples_to_encode-Ne.POSTDELAY,Ae=l(a);if(ee.mf_samples_to_encode<1)return 0;for(re=0,a.in_samplerate!=a.out_samplerate&&(Le+=16*a.out_samplerate/a.in_samplerate),he=a.framesize-Le%a.framesize,he<576&&(he+=a.framesize),a.encoder_padding=he,oe=(Le+he)/a.framesize;oe>0&&le>=0;){var We=Ae-ee.mf_size,we=a.frameNum;We*=a.in_samplerate,We/=a.out_samplerate,We>1152&&(We=1152),We<1&&(We=1),_e=L-re,L==0&&(_e=0),le=this.lame_encode_buffer(a,ae[0],ae[1],We,c,M,_e),M+=le,re+=le,oe-=we!=a.frameNum?1:0}if(ee.mf_samples_to_encode=0,le<0||(_e=L-re,L==0&&(_e=0),d.flush_bitstream(a),le=d.copy_buffer(ee,c,M,_e,1),le<0))return le;if(M+=le,re+=le,_e=L-re,L==0&&(_e=0),a.write_id3tag_automatic){if(I.id3tag_write_v1(a),le=d.copy_buffer(ee,c,M,_e,0),le<0)return le;re+=le}return re},this.lame_encode_buffer=function(a,c,M,L,ee,ae,le){var re=a.internal_flags,_e=[null,null];if(re.Class_ID!=J)return-3;if(L==0)return 0;m(re,L),_e[0]=re.in_buffer_0,_e[1]=re.in_buffer_1;for(var he=0;he<L;he++)_e[0][he]=c[he],re.channels_in>1&&(_e[1][he]=M[he]);return s(a,_e[0],_e[1],L,ee,ae,le)};function l(a){var c=Ne.BLKSIZE+a.framesize-Ne.FFTOFFSET;return c=Math.max(c,512+a.framesize-32),Yt(P0.MFSIZE>=c),c}function s(a,c,M,L,ee,ae,le){var re=a.internal_flags,_e=0,he,oe,Le,Ae,We,we=[null,null],Ke=[null,null];if(re.Class_ID!=J)return-3;if(L==0)return 0;if(We=d.copy_buffer(re,ee,ae,le,0),We<0)return We;if(ae+=We,_e+=We,Ke[0]=c,Ke[1]=M,v0.NEQ(a.scale,0)&&v0.NEQ(a.scale,1))for(oe=0;oe<L;++oe)Ke[0][oe]*=a.scale,re.channels_out==2&&(Ke[1][oe]*=a.scale);if(v0.NEQ(a.scale_left,0)&&v0.NEQ(a.scale_left,1))for(oe=0;oe<L;++oe)Ke[0][oe]*=a.scale_left;if(v0.NEQ(a.scale_right,0)&&v0.NEQ(a.scale_right,1))for(oe=0;oe<L;++oe)Ke[1][oe]*=a.scale_right;if(a.num_channels==2&&re.channels_out==1)for(oe=0;oe<L;++oe)Ke[0][oe]=.5*(Ke[0][oe]+Ke[1][oe]),Ke[1][oe]=0;Ae=l(a),we[0]=re.mfbuf[0],we[1]=re.mfbuf[1];for(var De=0;L>0;){var st=[null,null],a0=0,gt=0;st[0]=Ke[0],st[1]=Ke[1];var Ft=new _;if(N(a,we,st,De,L,Ft),a0=Ft.n_in,gt=Ft.n_out,re.findReplayGain&&!re.decode_on_the_fly&&n.AnalyzeSamples(re.rgdata,we[0],re.mf_size,we[1],re.mf_size,gt,re.channels_out)==GainAnalysis.GAIN_ANALYSIS_ERROR)return-6;if(L-=a0,De+=a0,re.channels_out==2,re.mf_size+=gt,Yt(re.mf_size<=P0.MFSIZE),re.mf_samples_to_encode<1&&(re.mf_samples_to_encode=Ne.ENCDELAY+Ne.POSTDELAY),re.mf_samples_to_encode+=gt,re.mf_size>=Ae){var l0=le-_e;if(le==0&&(l0=0),he=V(a,we[0],we[1],ee,ae,l0),he<0)return he;for(ae+=he,_e+=he,re.mf_size-=a.framesize,re.mf_samples_to_encode-=a.framesize,Le=0;Le<re.channels_out;Le++)for(oe=0;oe<re.mf_size;oe++)we[Le][oe]=we[Le][oe+a.framesize]}}return Yt(L==0),_e}function V(a,c,M,L,ee,ae){var le=e.enc.lame_encode_mp3_frame(a,c,M,L,ee,ae);return a.frameNum++,le}function _(){this.n_in=0,this.n_out=0}function R(){this.num_used=0}function f(a,c){return c!=0?f(c,a%c):a}function O(a,c,M){var L=Math.PI*c;a/=M,a<0&&(a=0),a>1&&(a=1);var ee=a-.5,ae=.42-.5*Math.cos(2*a*Math.PI)+.08*Math.cos(4*a*Math.PI);return Math.abs(ee)<1e-9?L/Math.PI:ae*Math.sin(M*L*ee)/(Math.PI*M*ee)}function g(a,c,M,L,ee,ae,le,re,_e){var he=a.internal_flags,oe,Le=0,Ae,We=a.out_samplerate/f(a.out_samplerate,a.in_samplerate);We>P0.BPC&&(We=P0.BPC);var we=Math.abs(he.resample_ratio-Math.floor(.5+he.resample_ratio))<1e-4?1:0,Ke=1/he.resample_ratio;Ke>1&&(Ke=1);var De=31;De%2==0&&--De,De+=we;var st=De+1;if(he.fill_buffer_resample_init==0){for(he.inbuf_old[0]=S0(st),he.inbuf_old[1]=S0(st),oe=0;oe<=2*We;++oe)he.blackfilt[oe]=S0(st);for(he.itime[0]=0,he.itime[1]=0,Le=0;Le<=2*We;Le++){var a0=0,gt=(Le-We)/(2*We);for(oe=0;oe<=De;oe++)a0+=he.blackfilt[Le][oe]=O(oe-gt,Ke,De);for(oe=0;oe<=De;oe++)he.blackfilt[Le][oe]/=a0}he.fill_buffer_resample_init=1}var Ft=he.inbuf_old[_e];for(Ae=0;Ae<L;Ae++){var l0,$0;if(l0=Ae*he.resample_ratio,Le=0|Math.floor(l0-he.itime[_e]),De+Le-De/2>=le)break;var gt=l0-he.itime[_e]-(Le+.5*(De%2));Yt(Math.abs(gt)<=.501),$0=0|Math.floor(gt*2*We+We+.5);var C0=0;for(oe=0;oe<=De;++oe){var Mt=0|oe+Le-De/2,q0;Yt(Mt<le),Yt(Mt+st>=0),q0=Mt<0?Ft[st+Mt]:ee[ae+Mt],C0+=q0*he.blackfilt[$0][oe]}c[M+Ae]=C0}if(re.num_used=Math.min(le,De+Le-De/2),he.itime[_e]+=re.num_used-Ae*he.resample_ratio,re.num_used>=st)for(oe=0;oe<st;oe++)Ft[oe]=ee[ae+re.num_used+oe-st];else{var Xi=st-re.num_used;for(oe=0;oe<Xi;++oe)Ft[oe]=Ft[oe+re.num_used];for(Le=0;oe<st;++oe,++Le)Ft[oe]=ee[ae+Le];Yt(Le==re.num_used)}return Ae}function N(a,c,M,L,ee,ae){var le=a.internal_flags;if(le.resample_ratio<.9999||le.resample_ratio>1.0001)for(var re=0;re<le.channels_out;re++){var _e=new R;ae.n_out=g(a,c[re],le.mf_size,a.framesize,M[re],L,ee,_e,re),ae.n_in=_e.num_used}else{ae.n_out=Math.min(a.framesize,ee),ae.n_in=ae.n_out;for(var he=0;he<ae.n_out;++he)c[0][le.mf_size+he]=M[0][L+he],le.channels_out==2&&(c[1][le.mf_size+he]=M[1][L+he])}}}var ia=Qe;const sa=bi(ia),na=(e,t=4294967295,i=79764919)=>{const n=new Int32Array(256);let d,o,u,h=t;for(d=0;d<256;d++){for(u=d<<24,o=8;o>0;--o)u=2147483648&u?u<<1^i:u<<1;n[d]=u}for(d=0;d<e.length;d++)h=h<<8^n[255&(h>>24^e[d])];return h},Ys=(e,t=na)=>{const i=P=>new Uint8Array(P.length/2).map((k,v)=>parseInt(P.substring(2*v,2*(v+1)),16)),n=P=>i(P)[0],d=new Map;[,8364,,8218,402,8222,8230,8224,8225,710,8240,352,8249,338,,381,,,8216,8217,8220,8221,8226,8211,8212,732,8482,353,8250,339,,382,376].forEach((P,k)=>d.set(P,k));const o=new Uint8Array(e.length);let u,h,S,W=!1,I=0,Z=42,j=e.length>13&&e.substring(0,9)==="dynEncode",w=0;j&&(w=11,h=n(e.substring(9,w)),h<=1&&(w+=2,Z=n(e.substring(11,w))),h===1&&(w+=8,S=(P=>new DataView(i(P).buffer).getInt32(0,!0))(e.substring(13,w))));const A=256-Z;for(let P=w;P<e.length;P++)if(u=e.charCodeAt(P),u!==61||W){if(u===92&&P<e.length-5&&j){const k=e.charCodeAt(P+1);k!==117&&k!==85||(u=parseInt(e.substring(P+2,P+6),16),P+=5)}if(u>255){const k=d.get(u);k&&(u=k+127)}W&&(W=!1,u-=64),o[I++]=u<Z&&u>0?u+A:u-Z}else W=!0;const J=o.subarray(0,I);if(j&&h===1){const P=t(J);if(P!==S){const k="Decode failed crc32 validation";throw console.error("`simple-yenc`\n",k+`
96
+ `,"Expected: "+S+"; Got: "+P+`
97
+ `,"Visit https://github.com/eshaz/simple-yenc for more information"),Error(k)}}return J};function qe(){const e=Uint8Array,t=Float32Array;qe.modules||Object.defineProperties(qe,{modules:{value:new WeakMap},setModule:{value(i,n){qe.modules.set(i,Promise.resolve(n))}},getModule:{value(i,n){let d=qe.modules.get(i);return d||(n?d=WebAssembly.compile(Ys(n)):(n=i.wasm,d=qe.inflateDynEncodeString(n).then(o=>WebAssembly.compile(o))),qe.modules.set(i,d)),d}},concatFloat32:{value(i,n){let d=new t(n),o=0,u=0;for(;o<i.length;)d.set(i[o],u),u+=i[o++].length;return d}},getDecodedAudio:{value:(i,n,d,o,u)=>({errors:i,channelData:n,samplesDecoded:d,sampleRate:o,bitDepth:u})},getDecodedAudioMultiChannel:{value(i,n,d,o,u,h){let S=[],W,I;for(W=0;W<d;W++){const Z=[];for(I=0;I<n.length;)Z.push(n[I++][W]||[]);S.push(qe.concatFloat32(Z,o))}return qe.getDecodedAudio(i,S,o,u,h)}},inflateDynEncodeString:{value(i){return i=Ys(i),new Promise(n=>{const d=String.raw`dynEncode012804c7886d(‰›•)((()>+ˆ*§§)§ˆ,§§§§)§ˆ+§§§)§+.-()(*)-+)(ˆ.7*§)i¸¸,3§(i¸¸,3/G+.••—š¡*(,˜ŽŽ(,3‡‡‰˜‡Š‰›+)2å:-œ),§H(P*DI*H(P*@I++hH)H*r,hH(H(P*<J,i)’^*<H,H(P*4’U((I-H(H*i0’J,^*DH+H-H*œšI+H,I*4)33H(H*H)“^*DH(H+H)^*@H+i§H)œi§›™3æ*).§K(iH“I/+§H,iHn,§H+i(H+i(rCJ0I,H*I-+hH,,hH(H-V)(i)œ’J.H.W)(i)’c)(H,i)“I,H-i*’I-4)33i(I.*hH(V)(H+n5(H(i*’I-i(I,i)I.+hH,i*’J+iHn,hi(I-i*I,+hH,H/’H-c)(H,iFn,hi(I,+hH,H0n5-H*V)(J(,hH/H(i)œ’J(H(V)(J(i)’c)(H)H(i)œ’H,c)(3H*i*’I*H,i)’I,4(3(-H(H,’W)(H-’I-H,i*’I,4)3(3(3H,H-’I1H+I,H.i)œH1V)(“J.i(v5(33H.-H(H,’i(c)(H,i*’I,4)333–)-§i*I*+§H*iHn,hiž73H,H(i)8(H+šJ+H)P*(H*’V)(J-“r,§H)P*,H.i)œ’H+H,“i)œ’V)(-H*i*’I*H+i)œI+H-H.’I.H,H-’i)œI,4)333Ã+)-§iø7i(^*(iü7I,*h+hH+iDn,h*hilI+i)I,+hH+,hH+iô7’H,c)(i)H+i´8’W)(œH,’I,H+i*’I+4)-+hH(H)8*J-i(p5.*h*h*hH-i')u,hH(P*(J+,hH(P*0J,H(P*,n50H+H,’H-b((3H(P*0i)’I.4)3H-i¨*n5*H-iÅ*s,hiž73H-i)œJ+V)&+I,H(H+V)æ,8(I.H(H*8*J-i(p51H-i)œJ+i¸7’V)(H(H+iø7’V)(8(’J/H(P*0J+s,hi73H+H,H.’J,’I.H(P*(m5(H.H(P*,s5.+hH,m5*H(P*(J.H+’H.H+H/“’U((b((H(H(P*0i)’J+^*0H,i)“I,4(3(3H(H.^*03H-i¨*o5)33i(73(3(3-H,H+i)žc)(H,i*’I,H+i)’I+4)33i)I-3H-3!2)0§K(i2“J,L(H,H(^*(H,H*^*4H,i(^*0H,i(^*DH,j(_*<H,H)P*(^*,H,H+P*(^*8*h*h+hH,i)8(I3i§I**h*h*h*h*h*h*hH,i*8(6+(),03H,j(_*@i*I-H,P*<J.i,’J(H,P*8J/s50H,H.i+’J0^*<i¦I*H.H,P*4J1’J.U(*H.U((J2›i')o5/H.U()I.H,H(^*<H0H1’U((H.i0œJ.i§›i0ži')™o5/H/H.H2šJ*H(’J.q50H,P*0J/H*’I-H,P*(J0,hH,P*,H-q,hi)I-423+hH*m5+H/H0’H(H1’U((b((H/i)’I/H(i)’I(H*i)“I*4(3(3H,H.^*<H,H-^*04*3iØ1U((5+i(I(i¨7i1^*(i$6iè1^*(i°7iè6^*(i¬7iÈ6^*(+hH(iÈ*n,hiÈ*I(+hH(i¨,n,hi¨,I(+hH(iØ,n,hiØ,I(+hH(iè,o,hH,i-’H(’i0c)(H(i*’I(4)33iè1i1H,i-’iÈ*8)Bi(I(+hH(ido,hH,i-’H(’i-c)(H(i*’I(4)33iÈ6iè6H,i-’iF8)BiØ1i)b((41-H,i-’H(’i/c)(H(i*’I(4)3(3(-H,i-’H(’i1c)(H(i*’I(4)3(3(-H,i-’H(’i0c)(H(i*’I(4)3(3(3H,H/^*0H,H(^*<3i(I*4*3H,H,i¸)’^*TH,H,iø-’^*PH,H,iX’^*LH,H,i(’^*HH,i-8(I(H,i-8(I-i¥I*H,i,8(I.H(iErH-iErš5)H(i©*’I1H-i)’I0i(i;H.i,’J(i(H(i(rCJ(“J*H*i;sCI*i¨1I-H(I/+hH/,hH,i-’H-V)(i)œ’H,i+8(c)(H/i)“I/H-i*’I-H*i)’I*4)-H(i)œi¨1’I/+hH(H*o,hH,i-’H/V)(i)œ’i(c)(H/i*’I/H(i)’I(4)33i¤I*H,iø-’H,i¸)’H,i-’i;8)5+H0H1’I2i(I-+hH-H2p,hH,H,iP’8*J*i(p5-H*i7u,hH,i-’H-i)œ’H*c)(H-i)’I-4*3i(I/i+I.i+I(*h*h*hH*i8“6*(*)3H-m,hi£I*403H-i)œH,’W)-I/i*I(4)3i3I.i/I(3H2H,H(8(H.’J(H-’J.p,hi¢I*4.3H,i-’H-i)œ’I*+hH(,hH*H/c)(H*i*’I*H(i)“I(4)-H.I-4+3(3(33H,W)1m,hiŸI*4,3H,iø-’H,i¸)’H,i-’H18)J(,hi¡I*H(i(p5,H1H,V)ú-H,V)ø-’o5,3H,i(’H,iX’H,i-’H1i)œ’H08)J(,hi I*H(i(p5,H0H,V)šH,V)˜’o5,3H,H,iP’H,iH’8+I*4+3(3(3H,i$6i¬78+I*3H*H3šm5(3i)I-H*i(r5)3H)H,P*0^*(H+H,P*<^*(H*I-3H,i2’L(H-33Á)+(i¨03b+(,(-(.(/(0(1(2(3(5(7(9(;(?(C(G(K(S([(c(k({(‹(›(«(Ë(ë( (*)(iø03O)()()()(*(*(*(*(+(+(+(+(,(,(,(,(-(-(-(-(i¨13M8(9(:(((0(/(1(.(2(-(3(,(4(+(5(*(6()(7(T7œ‰šœ‡Ž‰œš›*S7•œ‰Š”U”—Љ”›S0›‘–U œ`;qe.getModule(qe,d).then(o=>WebAssembly.instantiate(o,{})).then(({exports:o})=>{const u=new Map(Object.entries(o)),h=u.get("puff"),S=u.get("memory").buffer,W=new e(S),I=new DataView(S);let Z=u.get("__heap_base");const j=i.length,w=Z;Z+=4,I.setInt32(w,j,!0);const A=Z;Z+=j,W.set(i,A);const J=Z;Z+=4,I.setInt32(J,W.byteLength-Z,!0),h(Z,J,A,w),n(W.slice(Z,Z+I.getInt32(J,!0)))})})}}}),Object.defineProperty(this,"wasm",{enumerable:!0,get:()=>this._wasm}),this.getOutputChannels=(i,n,d)=>{let o=[],u=0;for(;u<n;)o.push(i.slice(u*d,u++*d+d));return o},this.allocateTypedArray=(i,n,d=!0)=>{const o=this._wasm.malloc(n.BYTES_PER_ELEMENT*i);return d&&this._pointers.add(o),{ptr:o,len:i,buf:new n(this._wasm.HEAP,o,i)}},this.free=()=>{this._pointers.forEach(i=>{this._wasm.free(i)}),this._pointers.clear()},this.codeToString=i=>{const n=[],d=new Uint8Array(this._wasm.HEAP);for(let o=d[i];o!==0;o=d[++i])n.push(o);return String.fromCharCode.apply(null,n)},this.addError=(i,n,d,o,u,h)=>{i.push({message:n,frameLength:d,frameNumber:o,inputBytes:u,outputSamples:h})},this.instantiate=(i,n)=>(n&&qe.setModule(i,n),this._wasm=new i(qe).instantiate(),this._pointers=new Set,this._wasm.ready.then(()=>this))}var ra=Worker;const aa=bi(ra),la=()=>globalThis.Worker||aa;class oa extends la(){constructor(t,i,n,d){qe.modules||new qe;let o=qe.modules.get(n);if(!o){let u="text/javascript",h,S=`'use strict';(${((W,I,Z)=>{let j,w,A=new Promise(J=>{w=J});self.onmessage=({data:{id:J,command:P,data:k}})=>{let v=A,r={id:J},K;P==="init"?(Object.defineProperties(W,{WASMAudioDecoderCommon:{value:I},EmscriptenWASM:{value:Z},module:{value:k.module},isWebWorker:{value:!0}}),j=new W(k.options),w()):P==="free"?j.free():P==="ready"?v=v.then(()=>j.ready):P==="reset"?v=v.then(()=>j.reset()):(Object.assign(r,j[P](Array.isArray(k)?k.map(X=>new Uint8Array(X)):new Uint8Array(k))),K=r.channelData?r.channelData.map(X=>X.buffer):[]),v.then(()=>self.postMessage(r,K))}}).toString()})(${n}, ${qe}, ${d})`;try{h=typeof process.versions.node<"u"}catch{}o=h?`data:${u};base64,${Buffer.from(S).toString("base64")}`:URL.createObjectURL(new Blob([S],{type:u})),qe.modules.set(n,o)}super(o,{name:i}),this._id=Number.MIN_SAFE_INTEGER,this._enqueuedOperations=new Map,this.onmessage=({data:u})=>{const{id:h,...S}=u;this._enqueuedOperations.get(h)(S),this._enqueuedOperations.delete(h)},new d(qe).getModule().then(u=>{this.postToDecoder("init",{module:u,options:t})})}async postToDecoder(t,i){return new Promise(n=>{this.postMessage({command:t,id:this._id,data:i}),this._enqueuedOperations.set(this._id++,n)})}get ready(){return this.postToDecoder("ready")}async free(){await this.postToDecoder("free").finally(()=>{this.terminate()})}async reset(){await this.postToDecoder("reset")}}const dn=(e,t)=>{Object.defineProperty(e,"name",{value:t})};function w0(e){var t=L=>console.log(L),i=L=>console.error(L);function n(){}function d(L){throw L}var o,u,h;function S(){var L=h.buffer;o=new Uint8Array(L),u=new Uint32Array(L),new BigInt64Array(L),new BigUint64Array(L)}function W(){d("missing function: INT123_compat_close")}W.stub=!0;var I=()=>d(""),Z=()=>{},j={},w=L=>L(),A=()=>performance.now(),J=(L,ee)=>{if(j[L]&&(clearTimeout(j[L].id),delete j[L]),!ee)return 0;var ae=setTimeout(()=>{delete j[L],w(()=>a(L,A()))},ee);return j[L]={id:ae,timeout_ms:ee},0},P=L=>(o.length,!1),k=L=>52,v=(L,ee,ae,le)=>52;function r(L,ee,ae,le){return 70}for(var K=[null,[],[]],X=new TextDecoder,z=(L,ee=0,ae=NaN)=>{for(var le=ee+ae,re=ee;L[re]&&!(re>=le);)++re;return X.decode(L.buffer?L.subarray(ee,re):new Uint8Array(L.slice(ee,re)))},T=(L,ee)=>{var ae=K[L];ee===0||ee===10?((L===1?t:i)(z(ae)),ae.length=0):ae.push(ee)},H=(L,ee,ae,le)=>{for(var re=0,_e=0;_e<ae;_e++){var he=u[ee>>2],oe=u[ee+4>>2];ee+=8;for(var Le=0;Le<oe;Le++)T(L,o[he+Le]);re+=oe}return u[le>>2]=re,0},p=L=>{throw`exit(${L})`},m=new Uint8Array(123),l=25;l>=0;--l)m[48+l]=52+l,m[65+l]=l,m[97+l]=26+l;m[43]=62,m[47]=63;var s={j:W,c:I,b:Z,d:J,e:P,g:k,h:v,i:r,f:H,a:p};function V(L){_=L.m,R=L.n,f=L.p,O=L.q,g=L.r,N=L.s,a=L.t}var _,R,f,O,g,N,a;function c(L){L.l()}w0.wasm||Object.defineProperty(w0,"wasm",{get:()=>String.raw`dynEncode01dd21c54d17j¢>¡-é!Dt 9&WŽ U§®}»/6|ºì,‰ÜÐ*ÝÙÂ:„C#ÈEÅõkµÄqÁ¹BCdq$GPPxÚý—¾–ý­B{jð„‹=M¸ìOÑ-Ia,¢á‘Å Ó®µôžEù= *f®Ø"þèҁ ËøÓÉÄà󫤡ù|þ«ôñ«´ÁœÜú¤«ìe«p±§W6(¶‰“¢ÏÑIZ»¥'T28€òÞ 6<†±*h²ëHñ'q­‡©ññ+9” LÏ8n'!ò©åP„.Þot__¹§ü 0J]ío Z ‚óÚºM´–õjÈ¿n)僽ðN\]óÐÖ]±<¿_>»5ÛÿŽ-'2[HÕo×m}&­Ÿx‘Îÿú&ô쯠/ý§i™БÈR“B÷¸žM°G÷;;T8k‹†Bš7 ЯQûzL´¨ÛÍDš9$‹EnA¶¸ûÃv4òCû㨾YcÐ>t2çZé†Â{‘˜¬½«K­ØB6cvpR=}vªšˆœã4ÀP¿Ø»ˆä4ûwѽ®ü—ªä~ԟ±CÇJÓžª±.NÉ\*±8jècª=  |†_VÀK×ã2)§}¼…gb/!ôÀV~–: 0-ÈÀu²Ì/@LO‰*ÃL1?çRMljÀw
98
+ K<î ¼G$ý¿‡¸É´g¢ô°rTªS¨З²éf•ªm½y
99
+ |~ ¦À?Ä;Ä¡gmjê'IhÅüO0Žb ¢¹†1 ÜΝhj÷ÓÚ:rþ^›KÓYÙº”ÊŽ¹«IˆÚ
100
+ “Ú©»WõªÁÞ\vvw+šÔ^¤hÄ|´Dl*6¹œ2ÌðPF—¼)\HˆQc”Qu%Ê,Jd¾7«Ô=M º®nø½ÞÈö6מ­Á?ì EôQÞ¡™éRÝ¡W*m‹uú®¨ ñsÊWÂÌ5Î= vŸ[x¨}\¦Æã£Q>wÀB•Á×(~;Þcí¹«Š
101
+ µËMµ;×ý¢¬²ùä#ÎöúëÆê<|Z,ªq1ld‘õtpNn‘цL„³k?Ü=M ¡‘Eõ¢‘ñVYÏ þHž_Bî)/¦'aP= Ôæ|vWh ÎKQºP¬l¾ß®mñ9ÊA¥»-BN*´.bÎ)SÚ!AY?b‹=}ٝ/ii·J€9+cRò ô
102
+ ΤíЛäsÊsùH43í~¢±†_r¦Îrýâ~d8c¨ÇM’éBaJ-geÔz
103
+  õPðð¿ç§d'´1; {ÑÄÐß랊v™ïuøOªf2ð–¿áâ9ú¢)=M2Î=Mí}Y íUbia½øyœ9‹›ŸØ'{Rud ɇß$šÏi‡=Ma±n·ìæ(Š®¤ûÑz9k+íB©Àòі¿ÕÇ*®ò[ž’ށ“.¤íûF~¾…~ƒPËX¤7ãڂTE­N=}¡?½ŠE«Â(c#§ åq4gQzx÷±[
104
+ Ÿh†‹ë¡eYÌ9] ÀGû¯¦õ0DÖmC=MF³XpȾXéÔÏRØïwŒµð›¨‚”É™rŒH~ô8ÂêxéÆ«g+†oQXÌËïvòpØ=M)/„"T'48!QòѾré½òR”=MPx®5Ë»ó= à?k$?Všª= ¸Iæ§gY;ÈQ®q¹¼ƒ"tž¹§; ÛKžÖƒ= VtéjÃ(ÖaM9Ú3°ːTÃ3ë=M¼ÉâÐ8V¥«Ðë¬|òX3¯ÐâIËz‹b}h&~ÏÙħdÇMBLŒ¢W= v‰ÁÇ&ÏNɟ 1²_èÆŠðԊ£.‚%3¹ùÞ^9]i^5ß{¢3{2ˆ¡Î‰;pmþænûˆ?Uï:Zs0£ o7â’ëü2µhý9—f×I]>bd ÃY6Ù$ªâ8L=M/´ôÔ~XMºM:@ڄçW?כ ÁžóË]œÐ\„‘ÜæÑF¥7. EX‹U?ž ÝxزËï˪Ќȁó¸3y!Q¸*H¼ð¨·cèˆâɀ´ 8bÛW<’ÓŠˆ6§ÈgòñÌ&Ÿ ä;;ÌÄ9׍³’þ(\,zþj}zŒSš6„}µlkñ4žþpŽêñœ?0¹‹´zõío܏L¹Ÿn¿Ü䌄Õ L×[MZ >ÁKæµIØ¥pÀù¦Ï †¼ºòÏ«›ð¯öþÞ$-
105
+ n m;hÄzEL´9¼Ìû ÅµºÎ¥½Â©»~>™µzt[¼É NèU€È­fŸØ Ôn£Ç]e?‚¬ogM¸»ïM˜.}:ßñƆ–ð㥽á<$Kݾ×^ý¹¤ÐMèŽtÌZ þÏcX= m­Éqâ%ãaŸ°d×
106
+ ZÌA*¼L|àýw,ØnÑ&+"]ìÂÏ(/’Ñÿ …
107
+ ü£#ŒbÊ[?Ñ'¼É>L¶yÏwÔBTNÚÔ]÷Vš»v7 Ã_^çwhshʒ= N´¯ØõxJ ؽ ÊØi
108
+ Ǝ?èÇ"X¥ƒ¾ð§Z <0›î†A¶õXXËÒûÞÆ[=}õ
109
+ Ç5ٗUùLìÿÙ™¦*Láô‘öڑ·éXö@,ØF¨JY¹( „õŸßOû ~÷LÒkjU @]%«Ì= .ýŽ ½8¶ÉØú˜lqŠü5ŒðWÿë@ÌOöSœ¥¦q
110
+ D¸ DX$ÐýŽ-›D¥®Ç0ëjÌ4F)%¥µ™/kçj­E‹1ξȷÒr÷ë½CÔ-h€&ðÅ:?¿;A?elB¢ë' õãwZwüI÷؇&çêh<xYñÒÿÐ’©Ž=}ƒ…>Á¸L°8u—¥÷S'º(ND½ú2YYü÷4AYӞ»ŠY¥©ß°½xuæJS½c´pbiucb©Ç^­¤’‡c™Ù#¥û~ŠX9éÓnI/óøæ!OcÇLëSqg¬7®úk“ê¬ù~žã+¶MœE ö£i>Ýh— 4h6•ª(¢¿+ûÒù†YšÉù³B<\ùžèÜB…O¢wUo‹³up £x/¢œñaʶnÿv>•^èÃ2Oüª®o[ù?PN%ÿš¥úý›ü0¦M§HÍ)¡ÈÊ>ueÞêJ œ<ø˜­RÐLº]ÆÝàãcï¢
111
+ ô_äƒéː*v;ªñ±Ú"é[= [^.ˆ]OÀ%·°5lÁr6;ŠÀ3<IďLŠÄô˜ÔÓö yùÐzß H·U´ž= ]| Ž@Cã̬¤IåÀPÔZ²w²§dã*.42ÔQTR4ªÁ×WÔÓNâ&«À®(jžâø(´r0Iíc_µ,ªñ„ƒsÈ[™"Æ. ?­‡Bj”7#êœTÚK—Î8ÜT7HUØ,›Ûžo= ªs®=}Y¿Ž<<uŽXJHÕrü×£Öô9͜AáªÃD¿Pq÷ÒwÕ03]ò5 ŒØ´Ôê²ü^‡pkÈÚÆjðôâñêzw—ܙ軚sÿ˜|xX¿†„˵÷ëÁ¬L´†Î¤wàÇä­4x½(3‹:‰0ÂËU¤˜ûêŽ÷{öáÀH®<QÙx¾ƒ™ÇžôèB’—ÌšÔ4´#mÞÕ­Û¤òch¨d¬\‰¹æ)õªŽˆC>Ó*ed]§níö‰¸?l‰JóC^fwÅí¡§~ä<T@¸§ZTû™[grÖptòÅîñO¼ |WØ©æ=M…,‰,ïx?^À7ÔúYPó@ì„ “75«JFhÜè†MáTWeÆò=}ŸŸ3e¤xšÇeú1Y«Ÿùѐ½'$˜ÑuüDû–±tJfþvHV ´ëê=}À¡~Ñ´kíå|WŸ#¬ÊÙ¾=}‘ùß<Pà
112
+ V±…a…æA¡¯}ä#œw×A¶´˜ƒSŸxûëívÉàSXãë)êq9S9¼~ê'lÖPÂ2ʱoœàý˜¡±o…‘ùÂMç.ôÞ1os¯N°ò¼ƒ1£¢8„Õu:+doOȎ°i֚ê9LTüh–®=}Êà22>¢ÿøIáê (xU_>÷À¾½Ï‡˜•éٹ²鍴ÄòJ4Nºoš20ÎUkgNì%’Ô&GS‡yf*õà•ÓäÍ´rò#6Të½Ê= k½Oñt5…ê;mÓÝ[„¯gž'N'v]dC²R­+*f¸ôw1´¶sƒµÿÉGnËGn“â·9DMӕ˶›X@{¿'iÛ]T®ÐÕP+f= ë…´¨nuž»Àôü(¦&ý[|çAbiD¬ÏÓSP¼5ˆù]×1Ì-Ω94ÓKÞÔ¡E0Uy2O,Ó/!sÛË4J#ï®Äd;´Ä‹·ÿ—›s†g=}”]ØÊ¨†èl'‹³x>–×¾~^øë“¿¬H¯¥gÁ'ž ù±"hRSR5Í-ý°{.‘<l~Lí¢›ý7ôgʑ CâNùü
113
+ ±ñy
114
+ y™¥_‹¿SXtRðNK{2î8RwãÕ9h¹=}‘ç5û½½o´kºÑEC쀹j܋ üS eNô-’¯Š³^dgˆRž b²ÈÁuE•×<‚Ÿ®mù)xK6 󬟠¼ÊÕÖô;hSÃü\ÖÕd|ÐϒiM ¼ƒ\5Ím|™Ñcâ<Ü= Hx}d½IZ¤x,©Ù,M»Î’¿öôù7È|껦q𜈜ð¬’.e»Ë”M%Pè”:ÓÔ@•Ï™ùûðŒ ÎWååߢîôIýQ<Ÿ|ꍳSJþÝÛLõf¤ Š# Ó›ûúlT¥ÕöÎ0,£,…,ĉüÌ+É!1üAÝû×¥…nî>⊟• å÷%{iæýʬ ö²YP¤3ïÞ»hå·xµ'¿Å*)Ru´Î¼æ—>ïQ“Yõb/c2þßgY²?2pÎ1T¤0GEºTìA ñº=}©Ò¢qý*æ!ÈÇýà^#ƒXT¢ÊY<,ŸSØ3]¶z_nPȳÕ= ’ÏG–!ŒV³µvx‡
115
+ ~3IìüàS7ªC—¿†ˆÉQs¶•Còš§0ô¶;k”–w*4Ñÿ,“$œÊŒ¶öòJ’EDи …¶À—%A•¤èS üŒChò:ͱ‰:¥$AÄ´I<"DfáÂ6=}êy÷Ϩh\ÖgûãJ›v2)½&=}Wj:ņÅÝ÷x;þ©†ÅÞïuM‹6ç2õ¨n6ːHãŠläþè©9þ©ŒÅ[þ©èHóG¿g{êŒvæ‘P˔ÌlÅ·Ô(ìªÚ±à¤˜dM_˜¬à—˜MoÇ^"K¬äá•”W}¼Ú­óøJC>H˜+ۍMN^v>gÔ,x¸(G}ÇË,v´(HSv«jX‹>l c»4Pê,=Mê˜ùaIºúÍaO ‹…²É§w
116
+ –̯¤‹ö<¢I›^Âô±Yº¦m[cù‡ÄvFõ7àzÐÞÒ±êqö¨’c’XgætŨøù0JáVí@ÿ0“K(uc.Պ2ÑUsé¯kô·ÎÒ¥©‹À|¢Eý¬…v?š>D±†O㮇C×]tdzw¢Q•k\SAÐuäã :¤ñ«NC±) ÍFÕ|†¶ùJ:²½Á²#môàÆdô³AÇ 'œ•¯,4=}åJn­óncoýƒ§o—ÿWz‡¸6>kˆx[Õ³ä'“KØG-“¥©ˆu¥Ö—jjž‘Çd<šýѱÇó,‹„ߊILMOG¥Ð^ñ¢[‹Ê5.y¯fQ¿µ~
117
+
118
+ ó¤s³*çè¹ „ 6 GOïù¦xpÈ5Ci¬à±¢Íˆ=}H2?Õ¶CTö{
119
+ #C°%™'Eˆ%¨ŽóbœGµÞ©fuGF ò…,´É §kÀÝaá–õ%ž!m¤'p/í2â‡gí·]­ã%¨€BçôzžÁÂ÷Éq%jˆ] µÖUÅ͟Á!(k7%ˆåŠ·Q‘ wçü¬ú@gÃȅV*ÖIý¶ ª6®o‚ózE;‘ÒBæøéa|x0$ÐȅV:ÖQý.tÃ%‘!±ïªÈa“k{5svrñ;E{K§0Y›fwdðªø^á:wà®ï±ï% ÷ƒ¿öÊ5“Œßžÿá_íÖ®þùcfªCžiI½ÎßNßHgƒšè·ú#³ZXrè´XJÜPe"ańÓ¨çg®•y(¾¤EÍÕ܈dñüü¸Œ?ÑÀ°_ýKq‡è¾£Mn£oH%8hôζx*Åñl:•:§2΍/O“Î<߁YÌ) ;Õ?ù÷ð¥¿r9T/Û!ғm4Jý^…I šè½ïÏ]2Ì=}òhD‹0&'9›oñ'‚g ⫍r ~eb= ô]GökŽ\ÅPVîòç+¤5í? °í?êT9î€ÿý€¾qYM¾ÿmrhœ*(–‡ˆ5òBå¬!z1pF]èUßjYw=Mw)ð‡+w-þ*%›&ðm*ö² 3Âé™Ï¢¢¸†©ƒ‘•^vâŵ?2§ôˆµ×¼†•â2܇2CL¥mTþ’ŸÈÀž™j©
120
+ ç“Äoœ¿>E’-”–müœíÎmF¼]Räà K·çÉ0à‘¿b÷ç΍wªÏ'‹Æ©°¦ˆäʸ%½á•:¸E(Í7ٚ¹ yåû§Ï
121
+ æqÀæ1½åæX-¬Ó-nÔ^×NZÐmö±£ ¤ìÇÀ‘E- Ï­#õˆãÒìêéÇÞì2ãR¢ HãŽØñÿµ‰®ö¯X#;RVŒ=Mµq àOÞØ fàôJwM¡ ´ÜÎ5ç+êqdц^Ó-UGíS8&™ž- £Y=}(£ÛÒQz¤²g<ñÔs Õs,õ±ªñÌ×[~+É= î âfÛNŒÚE‰yдERrHÄV$q²•“seYF ÊÒkqÍÙ·ÚÓå©dJ
122
+ oanÉkªoÑ=M÷$IIñDOl(ÐW?°+ÊÁ1ª?Ƚ*øTEtÆoÞãû5@¸¹ ¤î//b[»‡Â$9Ì+ ¦j¬Y*Eo"·^Elor~ßµÉv+TN?Å&æ„Êp¬FRiŸaR‰Ÿ ëh燗Y²y‰©ä¦9’öëŸRdò”+Tú!³Õ>…£hPގ¼ÿëý‹×?†˜pèý%êoE€á^Ÿ–i\ៅ²Ê^lël= 
123
+ ûygöjUÂÔ(1¯I°̇‰1Èð*.ÉLPJ¼
124
+ 7/M§,•ú)â+胣ªá¾CLû^#Êù±¼ rNÂ?ÑÚú@Ùºñ‚E纎‘&¼àîK Z¾þ‘2aìjSzƒL ®¬)ó~ñdlB¯æÕÎÍ ¤]¤å>= ôS@™”¯j$½£QÉCYàÑuݞxÓKšü¼¡ÔÉâÓ?‹^f[]m‡´@JÕ¡À„Åg?:h‹ÉŠìÊ#}"ßÊXŽ.˜8<„¹Šs]˜FÈ()×[ZI€2-}™LA0òώ™ÔöMæY3/q-ãþþú˜GareOR/‡&{X\?[òzÎÍÕéÌH°Žã}Â:û˜ ä«8æ= S°wîEjj»” fLa,¤ý»˜ R™0õÈjŸ÷a•œ0ÖæXÍØ^epÿÏ?GºåŸï#Zòl41bïA÷mŒe‹Ÿ§z d“¤+ 8|ük½…¤ÀÝï›Õ5ùe˜<kX´ìMѝ됈©
125
+ <–$àrÑú­ËP<âmNʊ¹ÒIí²œë ”‡€7«_‚–•¹ýpvß÷c9JÐö?’ÎÕ¯à%J¶Ç'ò•)²ª™¯+ÀÛêTUšÄQÄ/^ùKQx(c½(žó¤ƒX r¨NoïƒyW…:Rj1©= ¶©Isg0Ÿï¢þm òÎ= g„A¨0#Xеzˆù¾Ÿ¶r 6ÆC½K—tÀûrA—øÖw&4®¿ ôù€üZú±|Àoy&âŽ.V\KÃWñ՗ }×Vܰ Çé¶/¯zzªèÚÏmo´weRƒýŠ»rÉX½íMš2vDI#xс€.ÓwÒjü?x@´oÅQ©“bòMÄb¼Rä·Ä¿ìAQ•A,%„p"Yô= þÓ¶+ý©cÁí·óN3NµK¯ibmg^ Çï,Wüy1ôís[ÌÂ4µZ;>@g܎dÓ=}8·¦ŒT„ÍIø–z›½ŸŒÙ)vñòiú;¹°#)kü.ÕËâWï¬òF·<–ÊšN„Hg7Y|–µÜK¬/Jüð3ŒQIÔ«¨f$rjÁŠ#ü·ªŸR%@ÆÓ“ù¥P%‘ZršÂ+jゲ¾TfW«.]º$oõÓ:˜ÝþãÕ]l˜ýÀ0£ ‚ü°öϲÑå “¨ìyìíée0Q^¶Åÿ^F˜ùg5¿íBŸ“ˆ¤ »ö
126
+ U²ÏBˆୌY%´¦Î>¸Åˆ4d|(™7©kµm³Í@Y‡ŒŠô÷u*"—&jr Œ®xṡ>2Å‚~‹£—Œªwu¯sç¾v2@3@Ñ?–þǓ7M±²ÿlsʁ9»^¾Õm2À'#R‹¥UJU÷Ù;/ŸÈ]cÔP•Ú—C\>Ž*¦/¾Ã= 6rÇj˜´è8ˆhÌ›ead…MYyè¿]øÜh–WÙ~Ó=M ÷Ÿ+ÞwGñÙ¡ Š£êŸ,—¥ÝË|îâïuñv€æ=MY{æ—<øþLÍkÌ%"®uû24@φ 6#ݳ.’¶j¼*zg‘ ·(«Ú;Ի™o—ôw±Ì¨6À‚MɯcÇÍ®õ}ñҚGðu}ߥöÛWD1ê@dEáÞe#ÁuMJf5”\ýE­‡ =MAL6ðó Rç¤sI g™K4P¡ pº¨ñr#+'ñö8ýXJRh|ššÉ=}_õ
127
+ ‡/Å\˜Á/³Iã=M¹ŸN„œ8÷æp«~ýÉB-jVá–aíÔßÔ8/ꁡťB<Öÿƒ¼Õ܆ǯ=ME*ó—wóf˜sYrûkŒ¹Ñ’–œl7²HÛL$ÐòÐlùIwi¦‘7½ºÚbÔ;ÊÜÌÞ̈\Û§£êP[ûö(”ÁøÃÙBJèÇ<IJ­ÌÕIð\i×?¨ƒœˆ¡HdSèήfÝü²ž¥~Ì~¬8Ô¿E:IQj4¾§piz½êi=}·Οft=}3+Fdb@wñ­¡ÚÑ,Þº4ºZß·Q°¿·O¸JºOœò/pÉ3¨¹sz×2f¦Y¶Ó™´
128
+ ùó¦ºÔd}gÁá/ðƒDQEÂê€ä8|¾x¬£|{‹Djb€»‚†yª)DþDœKt…ɹ¾Hœ×’3Ì~’f‚§xæÑ¼*q*ñï•P%xRŽ3ð¥h;µÔ_,ò«Ö'ˆFÄÚäYuГ{$~Ä3Û¶žôT¯ VžÜ-âòaÙ7føB$¦·œ/Ô-S:²v½ÄۙػZŒÇs‡rÑAعhåßtA>i½#—߸ªlÞ°æ*,¯F³p¯= a͍3(‡ÿå-¹f¡&bÊkz¡Ë…æÿÀÿm¡z!>žŸêÆf¯ÖP,p!6þfpõu̸عØK2¶ïAöF²˜ÄT|ZÓ¶Ä\ÌZ›ôzHq¬ê"tBM”A#UØ0eŒßjÁ½öO Ø>%l Ná)ÖÏ=Mâš+$k}ÍÜڂr[í¹ ä²ë/™ß
129
+ ÔPOþ³äàÑkñÆãËgˆòOî7Dú)LOÖ 3FeÐD•Ö!#Qš¹5a,öÖ ßt>ä9)^ Ãì¥×Q¦Re!îb¹Ñ¶ãEŽnÈ;ñă¥Ì7DcàåpëÏâÚÞn>æ‰øtšK€-©"W^fÇG©3˜Ö~ÉÄsÚ"«¬^?«Rgm¨ÿìݽ.®NþâE!Á.EM ù&B$* šÐ2Ô@Þ3л,ðŒDù aB±QxeLÅ3gIQF ­3Ó¹ÔîÌQ½<ì†W|ÕEŽ®ì¸h œlf%ö>bñs:ÚK¯¸ÎsD×姚óžMÔ#ÿóØKO$=MRßíor:+!óŽòâHH!«Ê֛Þv‡ˆo|sè®§‰ é¿íñ~~«*‘wâŽxÞt¨¥{–và}åÝÑR4­_Hpà¶Pq§>µL,Ĩ=}ãökœR‚VS´DòëŽwvÈ2cÒÉ3á±Q”î1pG"= }²²%Q¡A ŸäмœÁ–àN?˜˜ë…ïR"†k~qè먍¼žîj©p)tç0Ø¡þðdvìRC.²ulê;P(ÒZI&ªPþ8rÓðHr‘(gq*'뎶õ)rЇ Ö+ØQ…Ø&¬sŒºkɚÔÖ»hƋjéý!¯ µ.øgÖ+¯><Fë^—ñ˜L’ψ>6{А­SÄRÆ*[…ÝM³?¶i9_A›ìÐù©"¡?_3ž ‰(æ(A:œÒá(-•ý°,ý—©õ þbÝWª.¦C°íbuUgQ-‚Nè‡ûè<l!A¸mþC=MGì]Áü[¸¬eՏ–ê;Ýà’@vñpáéݯ†• uÚR ÉûjôŠt^ƍ¬rT‡|NtiÈPqûxÓ!ºQ= Ð²»1eFÎÀ9T΃SÆtέÞÔïöë?öžê=}c¨¡ü|—+¯bç/ÞGÝ¡ä«çwZ•Ø ñTlËøi‹¶X\>òÆÞC؀«ÛOêV¤ä¨ûŸër6Ò\¿/B‡×ÃN«Ö°­Ð×{èþ—KlÓk![ø“û‹K|ÊXt:;YÄTþ‡Fî(ß­½ª +¼RSD€«œ¹Vúžîú!‡š÷¡ԗû¡3w]؍“{%q,§Ì Nv7йD•o¿HX·ˆ§¥vã°Ø§«Of0ŸìwƯšÔ2DâOv ôOÎ3€VgtŸÔž4Sފ7{©ÙCSc¨ÌlOf#>B +—©ªí ??åM.íhâ=M-‹Y+9Ë= 3%Ÿ«Õ°RµOö = Òã_rÖŪS¹Ø›¤…Ò¨’—,¡‹Àl—e?¬à-ªö½ßíy›PåHÑý¿T}· È~²?éƒùu»)£"_F––•…SVËó³"· \úEúÂ8÷Fln3_A͋í¨Õ¯nГiÄÐ<ò͋«×¤ÈÅt¨Ùç”|tkM̼á™õà
130
+ GöÞ9"ÄØSWJ·ÒUæTñ;ŒŸë0ÔrpXk£êg7‹H¥wipy¼àš8*a‡5=}ÙÀê6œDoUVýQö0cÔF“aüPƒ¾Åã5hŒœDå£Ýà}âì­Ó…ýõoñø¬º ÂøôræË*ziɂ¨“óÑ^<FÌä=}íRƨ…wN©¯Õ»>NÄIÛ¡öq D=MŸU³5ÓAàÌWc wóÒ¦FÅ¢¬N±H ­hLžôÚèrÁäpÎÆ”ƒï|НV¨{*2KÍʇ¡ìGrÕI
131
+ rÕSµ5šŠ´½® }rëý|"›kߘ,‡Ãê1ÖZµ§ŒV³à|’rÀRk‹ \ÚÄ1k\¹óZ[4É÷w΄B—̦<LJ z#2Ë~z¾‡ü¼°“årm„ÜÕt[½Œ_Ž?M©~°‹÷ʂ3!9ÙµîglâÖñلÉåV¥ûøäÐë= ^Ô/dxk0±:ÿ·6|Á™ö–æ¹ïY«%«„j¬V»9mÐIÄ0ƒ«–|‰P{š=MÄÆS«¤Dš°R˰oX|3·—‡%"ßÊáo. xp'øG§öÅ¢p cWΔ êœ Iæ„så³]ƗÑ](“h©Î«Og(iþhD(_ì)êÉØpŒXrƒß'È׊£·©I8š2= VDŪÅÊ.Û.²ÙLô» u0aÄCÎèºY³PgFùTÐ$h6¡W
132
+ ¿¤_¨~Ȱf‘\¹ªû¢ƒS·ä­ižÎo?éµéµß#Ücc¬½cpð= ‚Æ^¨yx½ºåa—¨±#*=MZ‘¹åg>øgé%jßÿâ¹ö”Þý~¸ëB¡ö¦MqCãWKƒBÅ}4øuîEî]}śAÊYëé¹ó”ꆄºó“$&øìÝɃî3ûm[gœƒ6¬<Lö^]5¹ˆ*÷~Èi:Wˆ= «²CLӟËÐyñYŽ‘¾ú¤¡"F…ƒUiƒçM³i+z1¼Õƒ'Ÿes[(„áíY¨ºßÆú߯ÊBcqîo¡=Mß}B‚÷%5D=M/àæ‡E¶Ñ¢­_–­/®pƒ42©ü6YJÿ‡ë²¢)…h&¸çqš2º$L6^ehêk¯ÏœÉÂ0Q•oé7!Q<¤|új–d@+Ttöñ7–©L¦u§â¹›-˜o•@N8•Fà~!7…D»k SH÷nÁLù_,­¹E=}=M¯‡Ögbþpž<#±f»ÿ3î–A{©ò–¯A‹m–k§°ïåõêñL†¶é±ó 6¨†X¢ˆ¸ ó¾·Ç®ÂvÅßRxÒQPÝKDÂyê×zM(ª£‡wê:L¿¬x†oG…ð±‡Õ=MÁ
133
+ Ù>fŠE2@ÙLŽÆ ϳ0‹fÏö¶ö¯j8ßcŽåƒsHýlj£ˆ÷.DÊMôEU¹£ýWW¥@Bü<£Mt:ôP=}CG?RÿTŸÕm¹me*ìŽa¡,7gFɉçÃq¦0ç 3 ¶óv0Øë³h©¶#A뫨yÚ´BÿP&D¤ÿPóÿPi”i|±‰2n8¸Tý= ‡¥yÒÓú‰tæá·QŠ'™¿?R…
134
+ ’7¸mM2…|S2“+ñ%û¨áD÷¶ Òä§N_-ð)oÅ6‚çŠo¥‹2Er!Ó†Ÿ…
135
+ 2õ*'ò_<{r!no…}+âu… jèx‰ŒgéÞóo•ëL­–sóF´Ð2)¾+Lûà ýØ€´Þ¶´ ð= ¤ˆ ٓ‡OîPUìR-Òøb,rÚ!ŸkȲµ†½}¿ê™ç«;ÐzW÷· ¡= ”ÑaÂ1W=Màh 0¸.¦[-Âi-šúNd1¨(¯þ™+?'Þ&DV%[øèycÇ ?3*–se=}ä^oùFÛ¨èæpp_&+ÿ°âä÷+2‹úîç´'7êÉðÄØ6k†„âž!­Ãò=M[+›çrŒŸÒÕgÎsά¢4ž<V¿ÃQŠª4v@¨A|&I‘õO\’AA\¬‡:&Ã8L½½“G°"ÌUÌqÍ= ó‹ÿt]Ö8b 2ë{Յ¨Ý!Ô8B·«â«®F¬¨ÄͧQ‚Æ™KЈÅ&èæè™†_&𩛁xL2®æÀõæ ºGï!t“ažCE1ÍÌ1Í.¸±$ªÒ5ô ac)[ÏÖ±g¬Úk{ëÙÛÀÊy®Fž 4(!=}jITqº8$ó,yT—ꊤ¨<·©5•¤Jl9µÀ1 #­-#4Dœ¥b=Mw¾—yõ–=}v…Ò늒 Š@ñ©'¡çF­HYögfQpÍ9ÎäÔzÿ¾é. â5XOÊ®q‹Ó4•_wÜ
136
+ \†»‡Õú‰mq:õó&ßg€^_Gÿ¹ 䱆¥w’²RÒó’EÆíâl먏L¹õ|¶€…É41ӓ.>ï5ЅN3sÊë4,7H"c´#u= ¸XÊ%«±š|üˆü &5 ¾Êñ~éRåÙ¾Qøô]¡~žù‡»Øà¯= ‚ë‰ß!R1ïõÃ@•9RV=}„Àu[ÿ‹%Þ9ZRþ¾s¾™[ÃÑpȄ¬6“¦´•Ãø´Ìï©>äÈM”kM= $1[ÏUŒ?W¼™[Oځ×þd!ë¶æÀg8"×¢^w†WŠû±äár<¨óÏ+k£ñÿzsm\˜´wm´E1óúîß}L\ö§’ïcÅÚÑäŠò¨º¾WÏÿX›©#wD~é2Yú|ê·ÊŸî%!Þb¨ßJ—Ä}_OFHãId''>”†ýŒ+ªÿIõÝ5ö4#CŠ{§úoaàËßBo÷ï‚Ð
137
+ ¨Éh0;ê1Sð²ö= ÆºjûîF= ÿ1 Ù¬)EMÐì‚×@OÆ<ªº¤™ƒz¢1¡a|‚L[tîƒWW·Ho/õ"ðÙ¬jê+nR}ñ= Fè=M²ƒ¬Ùè1Žr L¨¶„'8h!7Ô¯ì꿞ïì×5¿ž“ûU7ú<ýν‚úÉ΋vÃCh‡"6!4!ÊRƒM7RÓ¾é²v ö†P뫵 Oåñš¬¸¯ º+’©u§Ew-ð„ØW.ԀH{7-ZŔº:
138
+ ÷jBS첄2XŒ‚ò渳3=M€+¸ñãîîŠ3Üp™‚Û4Z*½ô0Ofú´§wºX]ÈfSÿ1ꆷMºX…Rw‡×_ØT4¬S±ÞSè
139
+ ú‰÷˜Ö“SúŽhæz÷j~à0–“8ÁIX8æ
140
+ OŸH¶âˆ’äI‹Š%›Ë‘²¸£wï³<Š&—‡›K‰÷¡æúË ä· V*±‚¾Ó/L2:¾agf-řd·¥±å1e¸ùAi^¸·ýý¶¯}Kæ©=MŒ2¿?mƒK_a§r±Ý⮺éøÞáø%¸Q%2vБ„‹€Šf+Û‰!†­Ñ;š«þw šU“ˆ‹þøA)<?±´øðu^·•ðñC©q»u¡éy³³€»ê$&½¡¬R×¶ºZ‡‘œ+æ™ýAB’²šûmÓ¿[êG¿^y±ä²„
141
+ …2ô3F,ìd¾›xþñ‚š2B¡e¾'VãnÍ'ԑƒ²LrÒ0­ZwQ$”ʏ½-ò¹yÕU—0ìˆÆ i{O¥ Ñ©ÉÆË• 2—ˆGg•8€à¿À’÷v%†K2<R+§Åº:Óª
142
+ r’ú… I‘[ÓØúð”ÑÞ= gשz2ez,O
143
+ âB¬.îL‰mא±¤¾êØÕX)¯˜×í\.ú3€É7‡ß†ç¨ôŽQT3ùãýzÙ>R°àÃ1%ÓØÝhÿí\tÔcÇÆšî¾ ö£XðW¨ë±AY‡¦|ÎRâ<½Í‘¿-Ò~cO{KŠ,‹¦œ§mçB°Äj H†À8órãèž=}‰6nߞ\Šßžàȉ+Ùqð­21QènÁñoÑì.p¨±Û…îðʬa9-Ÿ„gUpüjâQ8zõÏs»Ä_=}pþ3=}ÚT2\ØLæX ’¬ „ð ôW1ÿ·ìîû6
144
+ €~~IÌ.Ÿþ{Ÿ?À7³³¨­‡†¶¡ F#3­ŠªxeŽdaŽt\'E–ññz‹úIµåäxü4ëä¾Að±×â¹±{،žžè‘¤›üb¯ôVJ“^º:⸗EúÅçZÆl¯}PXz&‚ñY5= <f-_d5·~ ˆÇ3‡Ú#ꀯéˆöGêz‚oç2Möè#ÏWíӍìÃS#jÅ=}^’k=}ÁÉâáÆ‹l$áȯïJºŽ»߬Ñ4ÌúËÄo
145
+ ‹Â({¹C
146
+ ·@‡¬”¾·Gþì¯%ùŒ†¯ÍcGì-vç´Dàwq¦Ø•.ÝýÌ7O9A#¾à‘èË?ÕE.= €†'óÙ0‘9$ ?i—›ÅNQ ÝoÓòùºà%eñÍѱ 5I2ÏΪü«¿³ê‘©ç7CÅM¦©{6 ´ùž0Žˆlìkú9L51¨iÑðeš…Š+Ú3OFRì%¥À{ ”Tœ
147
+ ~Õ®­Š ‰{a/¨CY|Tè›Ð€?5®_"5ÑÍBôõ½ ¢7øÅ¹õ†jŸ*ñû*9\¡KG¹Ë=Mî®Ú9&[¾´_î¾TÓuVò„3hŸB;‚}à9ñÏ>ŠîýcbH°Ÿdó—9k¬Ž!Aêo%dFaoDŸf4êÇÉÞ¯È%â÷—õ£Îë.…= ›¿fÝ©"Ùuh²ÆU¡2c0"m뤤e¹Õ]º:Xõøh±Jó’”y¬Ù÷Õ=Mrµûº9óž"'4/AÙ]U‹(q˜ù¢Yµ]•镼Ûé
148
+ = {ë®A޹Rk¥['(y÷‡%1ƒ6bJT–J ƒª÷+fprP+mމÙã_ÞÍq·Ý‰—È>C‚]8!*VýA͕Qât¯çñ|›$tbá3”ϵ2¸ˆéâÒ444gQ~x÷¬ó¸¢¨"‚UT…
149
+ ˜¿:-Lü{$Ú­"1Öohu\íÈÀÿÝ\”évg¢l!8ª"±@¯û !Nª6ô±|VQÿ§ë–oéWӐ½Ój¹ö1P>²öí@Ãü‚Ú_áHÓiƦ{®ƒx{Z.@—Ëö°ô°ðQqþM+@â/«2°.Sr
150
+ ¨zTx‚ûx<´‹¤¹AÃÇ´±@Ë6ȾŸÊ«ªÏýÔ%Ònä F;;St˜é Xq‹M,ˆ ©?vÀïªìÉÐ)Ó_yPԔ]yØ1¤Ô†1—0Døª(årMã=Múž£‘lj,ˆ\ÕT†„2D*7R³}2„~rª3ðfƒ b%†ï†û CÕv¾Â•köv¨ÿÂ[-…iQÔ7UÔµ–z*‚c‡…vmÐɊú‰«>CƒB{ˆËÚ
151
+ ’»—ƒˆ"v‹—ˆƒˆÍ¸|‹¦ã§÷H÷˜…+v²zØdw‹5lQ9ÿli·€p¸]†ÅÏ ~å¹!ÏJýJ‰‚ÝÁ½Ã‰vnÊó{QĬô&ÿ= !ˆÄ€qÂ*)#™¼mž9dÙCý”ªË$N½”³˜ËÛÊoBsàÒç,I‰V?À"Îa‘ŠKúʞWäȊÝÞTwì Ý‘£u°x!œ^[ŒœTNÀÐäyªHixR©ö¥#ú€æFÈ¢kw”4\ ‘%ºó¯_q}‡é¥6hûšÛ¾x*l»wÑŊl»W5ân:þ³÷[°:HÕÂg/H¯7´˜þ1†‘ŠD‘Ó¹œ¸4|€#”¹*I-²dw^€ƒÌ3
152
+ êX|pÞz?åŠß‡™¢Ás­ËVÅ)­,Ù®Pó- ôæ;ý!ù3[õ(Ìî·²@p¦%ó+6X¤zBs]¨á– ƀÞ4=MÅ͞pû¢âšŠÌQd!Vzw–UQ¸= ®= = yÒc ë~å²;’Eó“·}õj2@ç)Ÿ3÷W?%óf8†=M@!ܹR•Ql҂r¯–Ä+†dÂFó”7”ÈïöºÌÉ/[§5Þ÷ä$Š…=Mô4:}ôR5ˆìŽM¹G22¸¯çR¦ÛF²‚T†Åѳ!„Ô¹ÅÑ{ðúS,€u*èZHW7$û×ฝ汃Kõ^p½kÕvšÐãõgkìŸ|/ÿý!Ñ=}r]ÛÎ[¨¸?ޅެnMæ^÷‘‡»´‡DgF¡‡Tn"l½T0õ‡ˆK¶ï“ÆfЇPXµL”!/4FÆjև(BêôUOI±6ð´Õ9HÀ'‹–19teÈy¤R­Ÿ£ûL¸H9 RNꤕÓñ4;<c@9X¬jHLê9²…Õ•+ÚÜⴗü¡ÿzÚ0÷Ù0ù/DÁïæÛ ؒ­AÛ›<#mƇ+Z÷fŠ›Ç±V•ŸþéÂýC÷tßW{ŽI‚ô» hÈÃì—etø¸=}!͹Dß®¼
153
+ ?ï}[Ûa䄏Kè.0¯à= ëj«€«Ÿ¯½Àáùžÿtêw²WÈ+¦_‡&Æ¥uÀ’4¯Rƒ‘ËFï¯Wýyuj§¯ö²q{7škþžJQŰEˆï¸;1¤ŒÎØ·&9¡g= ¼õ€h‹ Lëh¿OíOæ/ —+9 æuE’G9
154
+ C¶Ðjþ†í«c.Py)©1^‰Cج£UŽ7͔ú.ƬÀ†Ü ­e;ó3±¥(’²n°Ìði΃Q±NcdØM‹G ‡“úù=M“´¢ ê’2¸ïNs„mÎt=}²Ÿ†Ûˆ½dÔΤàW(҂Q|Yí<[Û»yÚF54ƒÇ*DSŽ·/a@(Xî½4 ˜0P^Ž.yQ¯––K èØ= †ÆYCëjeÚöÌgז•9á/úƒ\w[סý¼þã*B25¸- ºeǨòsšR=M-mÚ[ýÈùÿÅ_Úf­cÿJò”=}Ôu….•ë÷2¨]šù'Ú+3JIB%Z"˒µp4¬ˆÎ'±Ý¦ý¯µBb¢±­ä? ÄÑþ;³…Ð>xVpë²èA! Š‹Jõp/©vàr–’Ã/–u֏ÞZ¦­Z i &ö²– þÒ¯TÌ>Hxä(?“ؕÃWßך¾ÞDî€ý¬[æýî—Ì+¡Oóï¿É â[1ˆ¹e v€nAœ@)t¡¦Þ5Ò(èî=}ÿ¬Æºþ$=}ãO΍<i©Ñ¢H®®ë ¥e=Mã1<é0£+ç²=MEiŽ:Ýí¯Þq3ƒy]Óì¨eÕ.p>¬ˆšš8š¨ÀïèM:a"9@.¥ôق¢¤¶\æJÿOɁDœE£,¼Ý$#ÙÆ*G5>ò{ Ÿ|ÆB›Ìz1xJªì „¨ë0BŸ¬}i՞cÄ; Y¡I
155
+ ‡ƒÕWÀ£d¾üY5C²Íå+
156
+ ‡û*®ÅJŽ{÷NYÕg¦ä[9Ög‹ø%½€nX
157
+ À^›Ëa™zoBY= °~BªQ¼{ì›ÌÜu‚kL££Î*@ù¼eNÙH¶@›}TJí®R2=MÒ§ýBÎýjh3nƒ=Mû®_]B$@«é²ïÁ‰V> †ëJ ‡A–>d1W³ry‰Ÿ=  b!ï²,È1~Ÿš Iô$#uð¾«ÙV‚.¶0Gb­vAÚGdmD¼ÿv8»Ü5'’Úl9tñÿ±Yr¦<*©òïUr³”õ¢”U/?i¬TêüIm)r&‘×ìP5Ý;@ÒҏÂÓvíÕ#³HüóJl¼ã°n¬ï1’–‹fè.æç]ë%^VL„Ë6ZslU¡À'¨Îvà9Š'j›.gì?A–qE|P5_Mßô'RZÝÃÍm5ùŸð£ëò£PXF<$ç8×ÊøG¨ƒ \J€ý“VاèÕí‚pÈëÞ¾êî³,:0G_*[Bp×]CÉ÷@ñf¯'Kû+“(ŽWœÃ¨x«å˜òv‡yz‹óŒÁ¼Š sO"q‹'K­ëº<ßÇg3ý æ®-8+"®Šü/²Î1"öíÐps¾ÈÓMeñƒ„~°ohFfó~Í-d!b¿c´ŸÖ×G†\rrÝU3¢8®)&óLXŸb_Œ[×@ïo]15ÍÊ ®ÇøS7è ÿVq&‚›tøæìQ-Âîx[öoüŽ~÷¾NXŒx:“Q£Þr–¸¾Äû ¨D8’AFšâ|øÎ5¶o
158
+ "G¹É$ÿ%0GH#AŽj”N‚#/û
159
+ ðíQÙA Á¨!ø‚Œ•N56~Ûá"
160
+ 7Ê^’ÀЇÅû)HŽCV®×Â"ð¶訐ÊÏGVzI,R=M$j‰ <–š&öô‚ÍFº‚¬xîâ*´7öpZ®.X¹û"=M/³ˆlº4Ÿç¯µ9å±Ã_unH6“ßðVˆèÁ2·:E‰ÑMÔ/HšœÄj‘^¡]ÒãðöR‹ê369åJG-[ÛΚm†|¥p,Á.0ëe‚xì±åÙ˜Ô »qT?­',†¾ã( êsš+{çÌàö,Új·?<› !kÏ^,3ø‡Ð¿ñ0êz£1= †*­-= Rƒ±­~~ãK>²- „B…~~.çêi#e®ù‰“)EIö&ÙbÓö_ãk7¹ìÊixBy8
161
+ =Ma}ŸO1êiêoíz“ãk3ðÓõoãÔɮɮx c¤r7VâfB˜B ;#+0Póifâ%¨ÆúcHõ4q1JŒ% »ÊÑT½Á†ZZ9üo|¶).
162
+ ¡£kc¯8t³n¯I0wáÅ8B7QÛþ§°Çî ÛåŽÂ‘ð=}ê|}0°ÄáJ^G͕3‚$®ËòI‡buV˜ùçêZ~ʏïóm±_{ú󭖍ÝAhÈIw@9Øu %L1Àõð!™ãkæ¦*¿Lün¦Ita%tî:‚±”)«cVÃaå"Q3”g$,= ÿá‚ï“ۤ…ñ
163
+ dáÿ¶©e™kÅíÉm¹¢xˆ\kÛñÛÒ¬°ü½ÃQø = ã³“w;±noАÐR‹«³2(¦ÁBéÛý0”5ӂ/BÃHµT60F/*°t‰6÷òG÷
164
+ ´¯P\¨O= ŠˆtgÍ=}ÈKòÁ"‚ôñ3G¬ß¤/®,væÞ1åv%Ÿ̈ǬÇå©;åIT½¤þ= °múçۆ좒äk*.MB˜!94XŒîÌÓ·˜ý»H±ˆ—Þèÿ9#!ô̱)}¡œÔÏÄÊoT‚€ëŽQCѹƒ.f#Âe'DžTG1‰.˜îò´.د…ñ..úÒëjçGäŸÇëj÷l8$š$€i#:d0$šƒrÓ#õcÙ?yÜÑö՚o6ƒ"¦HÌÊû‰#ªŽ¡Çe$#€‹þ{R±HZò‡¬·².äZ¢G^†€»Ã¦‚.¸%¦çóa¥Q<<A¡xªžE“â¤GŽßýÜ¿¦^Ö¶¤…Ro€\¸¦ÌÁCŸMÀi•{܍
165
+ MÊ«‚›1¶Æ)ûÑahu3–Þœófi(T§²ÿ4Vt֚ªÀü3xÄÒÆÞà}mñãOi¦= ûêk¼´Op†né€
166
+ DɅ¤ÓŸö"°È÷Ós–x܉i\õaFûۏdP£daDÚ®…Çæ­Îî#®Î!¾É'** ZóK£­Úí˄6÷º„¤K[ËÚìÙqTµXÇ¿sî_™³•°é1°¶RÊu›;(Úõ«´ís៦á·ŒÈ í)= §F×¢;J5ƒ†>
167
+ xD’´Æ–J}WàǵŒ=  ÞYµ^¤\Dbü܏ûßøCLë_eúz¶@3üEø±Œ,cAò«‡®5¦³4ëÇ¥…òJ8[ù’ù†9©z ú^7”—3³Çȼq4+ÖÂØ‰¼Á%Ðç ´P‚íCŠóÖÃfK\·=};‹ÂÌ´ÑX‚ÙŒžãsqÜÌ=}+bàŠÝ[£Ç†Ôû@ÆÙ¿î°|ÕcöFÆ´‘ºâPGŠªe·–é¸× r—mi€ŸÒÈJ»Ž‹J¸á¦Ø…÷ÊÛgKŒ¾ß9Óv­£'1îÖs{ÜÇTêiIšVGÿX½™trƒ—/1üßÖºV@îX£ŸÕ‰b”ÏÎgಘLÒ#Xäúµ@Î,ÙÕ¬ÜNœe ûîÃhˆËÈÕ%[mÎñŽ9pÒ»}Lˆ_ºå©éþÑo7]!«º¤vÙlÏÛ Ú׌Ùlتx’åìØ?Þß9²°T߅¡´„V©¤í.#;¤UûñVts®’ÿ®×Y,êÊ@DŒCŒ~>­³È»Sr᣷iÁÙWG¬¯Î¬iT™§Wä
168
+ õA$ꈡӀ/£Ô¯¤|J/¢§üF.= Sˆœ·ƒà*˼ø|W=}s®‹š8+É0sq¯Ð¿É#éÞSnF
169
+ w4X‘ÒݏïéfIK‚p®ÑP½%&éìñ2BNdc6“ü=}wM²ø=MZà
170
+ = En£9ýUΑ„€á€äŽõŸUç©[Ò\h‹9)lx@ωÙi)·EÒ²ÒWÂTՎUäcžŸ6ZeÄ&zŠùf½b6 0ù"z@Àþ†o¼«é»?Ü*= Î8VE#Ü{zœP#롨W2ø²ŠçÏxNz„lñm»ç:<=}nÒøë\СÖù¤qèÛÝ5¼÷5µd·Þ>ŀîèÛfdS‰>8|  -ñy€\ékôÕF‚µžàÈì Î;ÕÚX'+ö<cÀ"ý¶Ó.Î>'SÔû"—ÒàƒR9¤â5ü–Ë—7>©e‹CÄØ/M§¶Êôêl1Ðã›>yÈÎqЬÜ(•Ó;×À0œî®ÏæðËp>…ÆüœS´\Õ®5 ãký=MuWé·â$7ÉJ²ÌÒÛØðÊÄwS]»« hgãÁ üw&Ú¨{êCPN0b_ñN­'©Ð*ÝCÖB K%ÌÈc¹˜6»r‹ØW´¢{p÷U¬bæ(ÿË…ªÌéO•.ÛÏ/jmøÜK8œ&†ñŽ”²,áž$p©öZ´!$ô™ÈJ€ýÐ*ŸñÇ%ö¸5cƒTC=}Ç1›kŠc‡x‡é’Ž=}:ÝÙÍØÌ@ȅd,Mú3ZÞH‰™—À_$šdØô¡ÚÇv=}Ò#tåv’¸{#zi(ÕGÝrò
171
+ ßÍʤ‰Àô[ہ€J¡Q7’JòAŠ:ÕL ¢—ǰÙ~<fց¶ùøñÀARS׌;Ê#í@ý‘¦gÞÃæ“= S¼M/6.u?\ebÈÄ¢Gõp:£ôѧ ’áâhßIG✻¢Ÿƒ>qM_.=M'®rcä^—_´£vŒWéö!™53Ó¦Y©uVŠÏb¬
172
+ ˆ6c_b>«Nœˆ?Î/˜@²:µ= ÁNý†([ ö¦ƒW^æÖD€©Ô·—À,Ð~÷wþÖ¦>Žüæ·7…ž¡š0ŽpÞ´MÝ<Z
173
+ ”ýÃ3‡ˆ"éWT›îŽEÀŒÇ¡"zŽÉ‚•Õ¾U‚­º+ Í­UWA”…=Mé|ü‘2þÚ®F\ñn{T2(ԛdŠ÷¡?tÏíÛKQ£˜KW4£Q78ÊBGŸ{Òϑ — þF·ÍŸ’¾RLÍ¡(ÆlÇ¡òä:¦$ R_8ZJ‰ª 39ºWN2"oHƈÞ. uÇ¢Q³ R¤Fø:(<Ð ±T'Õ²—ž÷,c&º†I÷äæ6jW„’SGñ’±[tn¬­rCÖWGëÖgo™§ƒ¡õ‹Ç>Y–ÁYöŠËUE-‹ÆÒ3ÿöÖ´™˜Ou=} ¡å ˜b=M,ão×9Mð×ß*ÒD’°3\9 Ç¬Æ!L­Üú›%°=MVFÛa+‹QAL¦Ëò¨PrL0’@ÍÀ̯]2;q:z³&´”2ñȟ±= áeBXM„úÛìÛ¿ÑUÐ%–}øª‘V´¦
174
+ ¥£¬ûädg¦£:ØQևl#
175
+ ù¼Ôœ$$h:Õªç»6ËWö<x¯Yl°þø@ç/Úá.”Hý…E†,NÎ;wK ¸ŒXÓ)ó#=}"Ä?gÞn€¥²ü_ëàé̯#ò±ùõííï¥ØDéNå.@4þ_–}ÿBäýˆDöŽó‚Ôµ= ã4ÂÏ÷¾Šgªý gV&.Ô= o3Ô(e1tá•ê½îm›ÿµ´è= ]qT]bFÉb?܂•£
176
+ 5ÎàœÍyMCü?‡½Ïµ]«¤Æi¡ÖQƒ—ºkÒÅS´€í'-©~®;_ÌÙªÛñ<dm闖ʓ±õ[АËVÏIR$&κËW¢³Ç^‰åÖ h2PّóBlÑ÷Õ”‡ähÀT¾³bzÊ×b˜À]°-¢üÓ,ÿQ2%k)œ{ç*¸Ksêr²êrÒøXžc§ÇëJßݐޗJ“4³8ÛmÎèäûS >gÔù7™á}™•†{,§dgµh´d}x㳀B m1t]?tS8m¬ë}ÅWíb'®)±‹vúLùBúŖÖŒ¼2¥ô³²bÝ÷Ob–^—LEp˜9ý%>{mÀ¬Óx÷ Kˆuˆ?Ä¿“g›ŠÍ-1îm(Pbôï{¸‡»Še"ü>:.œ¸iœµ¦õöä³×;èÔÚþ •Ô´1c R:p¹Lz ÎÙF}ÈÒ›N0޶DÿÀH#/Š)¢¢¢08ñ­= ÕQM=}Çò.ô܀…h\>4ÛfÏ<£Ï<í¢:€ænóâýÿêPÝ\}áñ㠉ëë6‹’ðY’+ÝE_mˆKK¶ÈtÛùã^𱑗ç3uÀ-íTd:e¹ÂQÒr½#îÃ|ÃaîÎØäu
177
+ éÏOÖ=}; ?]Sø¹­šœ= «\Ù»b [•¹¦»K~›²ž6lžˆY:.,3Ú&‘BnAvªÕìYúö@5Y~a$6s}ç°IS±é#.XÐnÇ ÒÒ%Ùñ Äߛæ›Ϊ͚缫= ÕÃÕx£¼ ٘ÎÔ?Ù:j{_ې.
178
+ (•þbà[UΩLõ.¹c‡{ÔË
179
+ t­ÝþøýI÷]Éïàl,ºù– œp¬£¤eï³'uŠÇéÜ_ÒLŽ ¦b ;;ë ó¢ÿ!cØ[wLÀˆèý)ç³á¤âv<å6}†qbN’ãû“]dûU•÷•î…ÕÙ§E޽뛫…é8|jŠÃ÷ú£/›ÒÜ÷=}8™dŒë[po8"éŸÃe/F&ÿðL¨äg⠌F<¸CRåGRƒÓŠ BáÜ÷Ò×ú:z¿Ý†}Õ[ÝVÆäœæ)ì͂djKC[YÝ|䌾gü^ÂËð_º¾/’8nd·èٕ?´‹¦1A‰êISŽê0Êݲ †ŒØ &Dµ ‡ŠÇٚfÙØHfïšÍ£Ðå¤F)ùô8ýu‹Wo ¤r#åþbÊôz2ã_¢-(ÑDᘕ+K³ð– I\͋|%ò©t_ÏN‘ý!‚¾˜èä>¢‹h¢t¶¦©,Í@¿Xgz»Í.¥ G[u©E 3Ý+k ðF^Õ³ …ƒ9áÄóg:‡Õ‚½]x·t¼ÁAdJHĊ= El ô§mç>¸EK›´îÖã¹¥šµÊùøÊÙjSSU:¯žêá\‹Àl<©¬kO€Æ©Ö̋O˜PNƒb£U¦_Á¹O÷\úû‘g½²hóŽÔݰ¼£|ñéÇ*Ì[⒔•gõ OXe®SpʳGGôä•ÀYiKºÒo«b‹ ¸@žÕðrL?¾L ‹¿Äú‰i/ïq»öh©Êá;«ZÆx•ÿÎ@‡crДÿCY܃^¾âËÀ…¥¶BšÞ¨B!—0z<ðŠT7Ìþ7º dÎB•¬[Ý,õùN–Jäûž>‹õjۉ¹SÁng5·×qn3:ÙZå?“ÛWÅ–é _*M'ï¹X>ߛ~åyõ”Š×LÝ Kü@f¾eêC‡L“uÄéGŽK 鎯±_6åtöçWþ_©í¶i¨ÕeñC-ý˜º_=}ôpyçèAÞ FdÀræ¹ß·Ãžïž]ʓ•
180
+ l•zLžwòpÝ.´-¦Ÿ§aEë3 Áa‹g°ÄɅnà¾=MSÄ Þ
181
+ Í´Ö«·¿¢I1DÖØqÙF®.Û:,¸¿G[¬¸‰µb¡%iÃ;º°}Âx]…˜Ö­þ1œù¦+8Æ©–ÿíü”¯„‘‰°ïS£_à‹«Po¹×+á¡d¡°’·Å3…GbC3EÄVJÐq-e¬ôi*–(G=}§z»=}Rxa%CaÑŽLª¼ÿ͹Îñ–@yq1HuM"¨Ha+C©§_„W¢%‚6P<¡öpNWQ4΃Pìü/ÃëÚ¹v/C;{À‹´²›g5©M@ŸZόÆzQ€NUZÐÖ[{&ÈVšÑVCڎgP{@-e q¨ WO>œÁì2r!ßÿþ·•­“¤¸(BŠáÓðy<Þøím'†ˆRÔFkB©zs‚¬ê¹¦Åed[o2¬)Ð=}U³ÊYmâ=}²hß,Ž,É!P0¥::ïùLo|%—UË»¥º÷c¢ñâ“Ù‚Ò.Zˆ‚øFÖz|¼Úî0©Ctñ󸋇¼ ]<„dýÌ;6 –qàԌã™PÀZ҇^ɤ'ÝÀ²ž×‰¡T”aÀ”.n©yˆN.·ú
182
+ .÷ï÷ìÅ}$A±zÙ=Mhâ¶ÔRVÅâùF²X(RÖÈa8Ëùoýy’DÏê;íÿœ9¢÷ý/àÙNÙ¶~æÐç4Iïh,©êîÄb¥6wf¼«|T)ëÙqX=}¡JٖÀ_5«µ/±;
183
+ 'b,qR§±BNwfªÍÔ»fûNÃ@¡o!|yi£Á„bšpbn²ƒ‡qéÃ’´ŒO•½žÿ.kx‡—1o1R+Y¢³û¿ž?§_~ˆ îQ›öžqxº ›ËøâÓ'j$J1F]BЍgýؕÙ{s¼cµO{2Qt–¸ä™ÑŠgˆJ…>¸Í«X·5~jò5þaë–òÀÐ|Òc/¸,Ðzt|s¼PÏØñ‰ÙÐØ¤À ÎÝkúa2qG¥Ô- dêÍw,:ÅVÊyJ5 ³¹£¦h]ŠÝ“ß«çM"k³ñX…b¶2ç6~mòç6~mÒñ{ó
184
+ ÷êT×B³WÄqøL¨ÓËیj_{§ÄQÖë݌Ic¢Bù¦YÛA7—Ä\Ù ˏ¶§¨œ<ÓÏÔØ)ªN;è Pt…[â°BËÏ\0ƒ?O¤RG
185
+ <‡ñ}©«êÕ&K1£­ŒCäE¼nÀ6ã=}tü½ƒìó6kùuå܂ùSOD5_(æ- ñ­¡hT…¤AåB)zãÅÊUð·ÌòO,ƉxÃXӜÜJa^™·;)ff ýä«Ã‘óÏey˜±w‡¡˜ÉEV†êÓ:Ó^€•ÈW æQ˜;ñ
186
+ ]m‹?œW¬Ú$l@ý E|¦Àýèíñî= ûúÙ
187
+ ¹îKù¯dÃÿQ±ïøír©õr{Š ]fÿ"éd:vìÇé¤Âæ|ßÖL)èRò$+ †|šïþs-‡*®fÄY'n…ß„%Z÷À¨ðg;ãÖÐKBÝBÓ(4år› q¸°¡°·¥ºk¤P푨0ÃýC²gĆ-“J ˜V=}Zp zWOI\‘Â\ÞvñE- bf¼reI'9:‹kòÎ¥
188
+ ˆ×f,ٍü¬¢õ¡õ¥Ì/ÿ= %oįT@ÊOÄ¿?~bD©DÀ—ÀŒYÆÃßÁ¦¬5ÞÆ¦û¡'iâ¶óhbwl„Ésÿ¾S]\Ó+cBk.úL®OzR4­t/ÝÒÚ°:NDNV’Å‹_è  ?®¿ ºðE295ÿô’·$4zÅpæ×Ý= î8Z>|¡§·Bd=MþÁw³Èj)1µR†y€G¼1†»·;à –9ihB¡KÊî[¼•9Óåùä@ú¡@ö¡@¤šÝä™õØâë\NŽxŠ·§ëÇj Ø2'Ԃ5w
189
+ «<ŸÓkwÍ•9mŽ T¬DpK”ðÍÄFÓ¥RÁxŸS7֖g£Ùim²y¢°Ž¬ÚŸ|öwŸ¿ýö?¦]HHv| =M%€C’ÄžÖ9%;¶Âd/[Ũìèæôóè5 Úã= «Á’…âÇìGGzjaÊY2ûlñ±'}mUF= y[ñËt³gRû¿¯õ¿†%·¡ Æþ !ú,ý‘«[ocѶü϶tnz£‘Ûy×­‰s޻ ã!Z†,…Ø&˜#7ŠJÅHèŸæC~‘ð^ɏf.õbIZOߔ«[¢³õªØY›bo39RëNbð–zÊÔYýéí¹%zç&
190
+ C¿•cq@%8d|ž=}˜é–j4êº++Z§”µ¦°Pò®²·OÁTp¦v{¬øESpeùLùêeJ=M뿸$>ˆÒ{¢ûpYB’aÐqŒ¬1ç½Ø{Š«È[mŸs«LåÄR u@ õ‹\¢- ½òK¼)ùS³h\øpâI€(,În¯3˜6“vØ˵øä0Kà! 9|åšuü{{ꄟÆQ¢Æ¾Ç  †,6€¢Ù÷MúɹŸL÷ÇŠÑh|Hªh? ÑWw3Üô‹xŸN³‹¹!>±À[¨ÅrʘÈ—šG·†ì‚Ù´]T|aMð¤'/‰Œ»V"ÍWï›Â{€”Y>Wå_¿‹e= ¾Ò•í¸6õ¢KcH}öfåá·'€À]ý¿CU%0õJ²äʂOõr†F|'þ q”IU@ÈK»%9‚ÿà;ÒÍ.¨Ê¯9M¡[ÂÄ æO K«^¾áAÖ˨ْO؇]|4¬RÖH­Ÿ‰›‡æµ@ÏxÁÂ(L *P¿«ˆ‘(¥Ó|ûÁlœVíØN …Šăø¹bsH=}}š{úŸuÍnÁě™îÉs2š¾bŸE*«1íï\Ÿ¹‹+¹‡+Ɉð”‡0= O~åMx$µNîÔ\óýú;É¡?–µ"+›áçV}B¥ 6 …\ßEî’
191
+ ”hu'_/¦ß§:Øó¼\ä´b{
192
+ BéyuS)Š–’[Q­1ÔÛRå˹9Ë¯xl9rk6F q;¤¬¢²ߤòj,”[°™,­ØÄà’ó›r9ÕãÁ¬º²õØóÁ†²ù€¹J;H˜Ö=}ò¼æ@è²\×ꖳC32³g¤ NOÓxý/«Ý›²·¤RÊð<ØÕRœ<QEkpÂ+™dªïbÝy’M¿8‡V©wø‹xÌmކf>UMÎ@&pj8g³q•L.£‹Iº&é"DìtèÌTè¤Q2oŒêRÂÃÙìœþ¾$“TÚ5bãóýíf)_{mÝ«hørï»9ž˜ØèY^͚­•†›«’3í8+ô.˜L°9°%¡ÖšºÆ4<EDÂR‘°­Ô˜ºÛ2$oe©ÒÝ%UH¦Æ¨~‰Ô 3(Ì:¡Ýo01hnÒ“.ÿá¡ìô¥KþÏ[@fÃfÇÝ»ÏïRID( ¾BT,耉Û8Ÿ°“ºAÄÕvdÑè­OŽq›ø±lPIVՏL ßWà¶:­rÐD{RÑ¥fO¾0ÇÉѱ¶–RñªWÞR‘H!ÌG®û~‚/“‡è/_sé떕·é×)Ä*XÙ_ƒZw*Š*øZÝ4ô´ÀºÄ:ñ· ©IDª<”ÑXHJÛÌgÁ›ñ= *HáHŽh.Ì 9“,û!Ä|0¿BãŀȓJj"ê.]q°›f¥»ô±!pr=}@+Š#³ÒÀ—*ù‹¼¡!^JhÇo÷ÉîCj3¯êF+)¯#ì³´}ê®ýJSCAÝã<%‹[ÈÃ#gô”k޼䕴eQ}¿˜¾ŸÄ¢5‰o=M4¥!†¯ ©-±€cçOøEwö<{NU›^ï¶ZÇÇAÈME§¹œµ•iò-8cÛë]n²Àr2Ú֛hp@d?'Ù¿ºÄÎÍíŸSåå¥q@= À28¼9R¥~oz̋ÿO•iò ´¦kÍâ瞯ª·ù%|#¸
193
+ ôqþÌN /ÀG®¨xfê68»‰ç¸££Ü”6"p׍–é²½<1YNöyMy^eƒÔ0Ì2?] 8£ÒðoÿÞ)†üZˆ¡36¶–íÁúÌ–i§Âw…kι¡i¡ðÕå øAGË<Ù¹%áíjyDÇ?"ò»JòˆmóK >‚Ê×á'áB]iéuLî”D#¯áú:#«^ Ó°¼.i™= uÐÑøº©>=MFª~/“zÉéIÒ*RL÷V8·PW“‰Ìؕ’Ù’‹™"ðú‘yôóXʇ½†'5OÃÈ"!/OmNP֝J§äÉ~héÉÐU:¡U,ö[”¨¡KÔÿ|ºŒ?² 2b¹f¹™>­[ɯÍ×T㶄rš¢vô. /‹È†t,ðì³ ±’†Q®’^¾YeF/¨Wz r%T= çDª= mxZ⥠®ê™¾bQùÞð/ÿÍ ¥—ú'*•;Ý+1Zq·£,4æ:¬YÁhµÀ3oލqU¯ž4©ªO= D–oñ:âÂmá®5=}÷*¥°™HBšÁé|XÒLΡ ÐÄ|Ô~þXi^ð<†ÏÐÔ-ªz_ºóRˆp@ånOf´Jç 2Ó³;"~ÌmJ{q3aLÍ
194
+ ÖC¸>g&‡+‘n Á—ϳÌ-²W™ù[e*åT™’.³˜7aЖ‡[HQY<íXŽY »~HÿoÖ5–ÏxfC¨
195
+ yœy\‹
196
+ ‚ü1,n,BÑøjjO’«cˆR…´³à6E8òJQÙÈñ°Qð7Z6(–[äòa±¼cHÆß+RÿºTÅxAþŸÏ:6ІaU%‘ó\ЗV5Ò>¾p÷áÖØGªì§|F+62÷A¶ÊÙÁÚ Dó…§çj ²÷5n™Ó­G&kóLrê:8¯=MÕ
197
+ à^Ç@©zç}IªR2‚0؁´É1òud%~â’#ÎÞ~:“;ø‘1)¸Ì²—~gñòÛ÷™ÑgUҘOéD÷.}÷f´˜f·-]9 .˜‹¸3 Nj‚;ö*p-§?žg8XfúÆòtmIßwo<²X)
198
+ )ªß=M7M•6©A”hr.-^€ý#—½‹ìvö^hL îJ¦-C„—×»JÁŠtŽðXA¶løV$o6…J‰Ñ
199
+ %~8tE"í_+<Q­ ·6j ?Þ>þ8/
200
+ »—lmh$´DθWm®¨R
201
+ =MÑC[Ž#ªfQèìۇ"÷À}꺵öL@’™§G¥–ÔÝà r,¡µ*‡å¤D›A÷"-âÛ?»>Œ= ôÞñœ½ ØyZ閟³ôˆ= ?±ñ4;þÝ»xc¸B/ãNÜ@ï¢rCK•µû->–¿N%¢eÃáÆR¹žè ®"=}ì±í Š ûòÈv]Ã<L…öِ?l3‰å?ÅHÄævdk}‹æpÍø€£”—¡¬1îti”ƶG?ðp”‚.¸mQ“w§nEñ®Sö…¾(= ÏÒÀ¢=}C›ôs*üñÏ-:F½iïhê…á¿Ød¶Üñ‘*yágÈ×Ó$åœâk‚Nß[Eõ‚.a*2î“珔7 à÷;ÒèäÂ4t“jò—×Q—*vq4®0¯®=}~‡SCǤ2JvÃ7³ó,¼ë MKkdžŠ2–Ø÷)=}1:º¥…I61pÙòoµ o_7c"3ïè8Î&ŠÒ+g…¸?"Å©Ú9ÏzXÌP¦ sÆÚ¬µÑásOî/šûk*—Ø:W¼æí½-…<OúÃBôNþ.DWÄ{ØY®|!32¿­VŠù¸Ø;‹î´äFz>v†àé<¶, è=Mp£HA&ysf„4¶Vˆ‹Ðóo-¼NÎaSŎ“s ¼gÄæá³AÏ©º‹õìΊi«¼ƒ„[Ä­¯”Òàz4èô‘hþÜt3Mô„Ò±¹Ôg´؃>ÓßÊމÃɝþ¿ÒÅñ•A¼J©?h*õgÂGBO.t6N&ٚG}bÎ@î}>r:è÷‘= É:HËl‡Eúµ®Gµ_[ö­7N=M“3ù³gà7;€©l®«É•ü÷LDÔÁt)»º·ÇTùªõ·QúM?Èr%µ§}œ2íéç#£àکȲF Lrb‡ Ú>¿«˜5Aù¨Ûò-ÃéŸ>2Dí+‹¥gMz#7$7ʍ ‹ûõÙ­Ýð­WD¯Hy6,޸٘”‰ØîgÒRYi7÷æFF»eʇ™kîíËÿ*Jj¶øÞ~î"†2Òä:»}9·±|2 rÁc­V7GwÚ¼~¢ùYyŠZ
202
+
203
+ &= Szö;¨a÷• ^æÙ z ó}s‘RN‡³~Fô—ZÅ-!ðn㔑ÃÓÞ8NFné-’œ1¯wÂb܃^
204
+ ¹±„öbǰ¿þ…Í.áÛWMÀm´Ehå?®^ñ=MÁ™ˆCƒQ»²Ö‚z|pIªÙïÆÙo¦*(¡¦Où6® ðè3“jrJ~$¼ž³ òʨ|‹J® .ȕ‹JRÓ¶¦¶;ÊV= ÎáNy؊&= >[;9TŠ/ñS'ê¶È£(B2¸W÷LZü³é }ì¶Öd ´= r5§údi˜59=Msf§ùfÿpɁ = «ÉēTwì[ êݨµ@Å^6a‘w!Ééae)ë…ú(•eX1*¦ƒ6$è= ýW_Ùjá ,v%ñð͑cO)n=}Ë Aá(žoÓݪë‡'®äÉzž¬Q˃P”T­– yk+«VÄ¢v°vh‚òDDý«e«Å{˜\q{ZÌv€D«X“®ªX“°ºXóÅ6Í{HŖ£X‹„Ä×XËßR»kD‡N7,JÉ¿ö35ÓâÜÌ2Ò$Ò¼õr…çvi]æfº“7ߚèU:,䝅–-ÿãºj›ì˜k<æ¦Z¥*¥y춺a©ØmbAxì¶®aüšæ~hþ‹æ¶¾ “þèA›æ¶Ê ÃwmHY%»a9Ä ×*¥ÒŠ -HêîʦÆ^ÁøL»%ø0ŠRG„ÀØ ÊÖ.¥¤k»\ÃhC–sd­}Œ« ¢9,鈊²ñ´øOÚ+HòMüªÜ冻øÐljÓÍXQ™µÐ|2­­Çh yHÉø¸Êh±9Î'‰ØGå€!™“‚ìø•R³Î>:ñÐëüó7©B“[ŒŠ“‡®†Ãësõ$ð­ËT7ÒV°£0DˆlqKë_O½ îŸ4YU3:8š)ŸïôýUMQ”mݽó„Æ"¬œÊ;I¾…äÍÂ3›ŠM?ïÌtøA§» ‚RøÑŽ*«bÚÍrŸu¬ÙÎÙôû3.Ç”êù6>…+¦¶á½Ög4áIKIƒÄ‘N!wH?Õ#ҘHþ8µ)HW ß)cq= þø¨ü'j%݉›fúOŎ÷sÆº1(axÃZ ;÷™ÂcÑÀïàÜ%$¥ÒF•ꦄàûœ·Çi~ï#¶ˆó¢cáØ^›Šž‹Ì÷‡óc€Ö‘7.13ãpñ}Äc€Ç^Œ¥h‡ª+„µÅ“iÈ=}RÓr€„‚;~¦KìO›´'¬ÜÅK'Y‰(â|†.¶¾]à‡.N9Ñt½ÌŸì)½V -eƆ:“ü³×µ0±W5³à²nˆ*
205
+ þp,ÌV󹔨0,‚.%ú$²%Odð= ”Vü²ê^&ü•~bèÀN½† JrÒMŸŠbíø¢—=M׃÷.þÛ3îì‚ãŽLô:빁épõ 9@µŠF0Þõ× 9úÍù:|’Ñȏ¯9ÞG’¹Ñ%QJ·³Ù¤‘é8•¡ð —6ÍR*Õ.xOWó·­KWϦ” ¾*ºf睓8°ðk¹Žoa¥ÝÇ ‰S¹%¾õ èëÈ_@ôú€4á\%5¥º¾2+Àb×‚’:æÂaöd=}ï?“:-˜Î4²Mc]?¼RdñyŒ(gY°*qñށ*ôsEÀsBwåG:¦×/ˆp?Fx<ÕEv= º¦À¾V\0èl~q¥³u= ÒF¾î‹ÿËm}ãTߘ•ÆÞ§´¾Ø¥ƒgli£)ÁäSÒ×HàJi=}ÑÃ
206
+ ;Ü]xÆ÷‡¹pÈÉØ.; L\vš+A—¾¦ûì!Œ¤Œ×­¤‡O´ú—»å ®>1›ó&
207
+ ðê¾§ÿ‡‹D]·þûÔm¦XrE¹ ÿm=}2:ʇûO’u„Ëjɞ D%'gqzóD3Ƒè&'=}ð”¶dAk‘‚2N~ȏ–ϗāç+#9TU1sðݦ€‘AUÁTDW0vS°¨-XgÇoq®ñ …Zæ!:~óÄe"žŽçהç˜0 œ³›Cé.ÐF§*ʇëÆÞGfƒËԃc“œ[,$Ͷã9䪖֠khc •ÙrÄÀ#Éî2§Î•4ÎúÍ/LÝgľ˜èz§Ò<<I¤ÔµëÂÕ띬ôô¢TÝ÷s[ ýh0º@ÞPõË稊!:ä¹ƝUÈìQÎ%±#ûd€@ô¤ÐRÝÕñ†û=}pYW­ý\BÃì¬î³† ºóDÏ4=MiÍûšÈUý?ºÐRŒ´_{˜µªX¥Ñ-¢H©-Ê=}•dÈÎK©ò«Þ‹ ÿ·™ƒK,Å6¡À¡@òG܋n¹ÆS.]
208
+ QÌ-9ÆÿTâû²ÍtèGü>èT°²7E͓wÎ@a>ŽZä»p«>äPõ[Ù Ò¶Ú 'ʺö0Çxq ƒò®J94=MM‹™iÃ\ƒ•£mžïÀ&§nIø§nIüsM T†‡\r9+ȁ×S$Å Œê%Ñì—ô'sªG4aú°rək´%×Vy¯—‹¸)x$‰Ú_¨y•…°€,ÃæÀGgÏ"'~ô–zË'Zà†º_ÔMÁ‹<¼.ç’;¥A¼—‚=}ÈLTQ®ŒuҋL0y—·ï³@?:ƒuÍ^Ó= bšÝþékttå" Va…J…÷—Š „=Mep՘kº^<Az_­î›Ò…$ƒa<ÁCqY³(1Á—v…y½—¯CBÇo—I&
209
+ H}§Šž1hF˜ãCoÍþ…þ
210
+  7¥äJa&aï‚÷>÷¾…#/_Ÿ.è>0I¦0":xÁÒBÿî
211
+ aÊ;ÅÀj4F>Y¾ƒºÉŒ i¤>Ê{7Àíë…Ñӱӕ=}F³Y= ±HÙãæ rN\ž1EI=}²]òÐM͍Àô:$%Hy‰RŠ­™…4uR°Ñ_"’¤ÿâ¤77_«å2Òe ၘí¤îA¤"‡d× ¾㟮/Su0¾µ"©ãhW҈ÔÓaèH ^y²g –.á¥ê¯3©¸”ŽE" ÞÒ¥lM¬}Øü'Aõ«§J=M:1;£òòJãÿEë¬-N~pާô!øEy±Ù@þ²§à.^êï[žd¨oΐ×»iQ¿­µOµ@B)³0úlº_#þf{j|>0‘õÎðÖDYSi3ûYL}ýn®ÞT…W´BO]ÝÑ.¬ý’‘Úý“Ýä|JYîYø$‡= ~gC:¤ß¬í>ó’»«¥L¡¼GÖÀeÞe±= ö2ä õ—²±Ã‚y[ÝÀ}‰™ÑwÙóPzè CÂ.<©RÙ÷“ sbwŒ¹!^°fy™bÙ&Àöy¨ì»ñ¢¿zr+*óË< h—O ^¼šK¥v)|ÈQ‘&CF‘h._Sì’è®ÑïJ¹Ó@GWÉêVAÀ!3„´‡Ô†ý'V°É= sì ÷“‹¢³›é$Jš”tB°1‘æ.Ê@$Öù—-±Q£bÿüžFȱùˆ€x˜ë£(MÿR®^ íâÜ^ð́ü»äE’u{­2.%üŠÚe€=Mb§i¡k¯›yO ©YЍ‘‰y#ÓÊj´e¤õ°‚ªÒÛÿÇæH™fOÛgN¸§¥<ªòŽ;+J°¨†V‡½Pâ¡ÁIZetE
212
+ Wå£Ñ$V9#ÛïG ŽÑ]Q $3Im@ØþxUnã
213
+ xô²ašñ¦ýû-leýð¨Î,$lÕ°8(I­•i$堘 V¤stÝ “<"k棸ä1Œ .N:{„ÇÇ¡(Þ7K½üååAú+¸G3ç6-A“JÐAj(˜ÉDÄÊBhnµc„±„wð­ÿrð$‰§ä¿¥ãôq#«ú¨}ŒÂ˜}Åò‹ïšÏÜþ2”b0WâLâÒÁ6V⠖ÀVÙ #_tà¶¾ì†Qn{”DZ^a%EÞ²– Íés"M”÷E‘=MïË$>ZR›·bˆö/\†Cwkó/Qù™n'OwÍÚ哆×KgçÀ’Ž!„ã8B}òÎ>ÆP™Ä¼B=M3ÄÚ5®ZÊ»&Pî”Çbç©S!ëV$҈¤ç ßÅãólÌWßhÑÍÞq(Ýq_Úk•ÂÂͪÿ‹ø’iK0c« =M6g?I4%êÁñóEžv¡r÷ôþ‰ñ'ñ#,‘x1¯47RÕrޓŒ¸ßï†= ã-Ž ȧîi{ÓÑ՝ílõnÒOû}¦^ 4—§ÿ¾ÐÕ£ì©O÷Ŧ–6ÿÄC3>¢«oc[ «9d¼k|T&Ø3ê=Mñw—’ZêùÚBљÉÀ÷ØÅ¶l7µ¤ˆlw= ì?̎«܉»,ñ®W1ä›{Ž÷µ «&¼¿!’"µá’tÛbê¶v®Øc¢c²ŽA† Xs¢¯dæø/¶ó†—ˆ%BH/R÷ˆý†U?3_ Úw5Æ?Þ-l¡ý3‡­’Û~ÐM(¦$J.pƒ8…ÊÐ+£õL6Îj@ÛÚàHÎ9Çïó!IjåùŸœÈ󴘍•;h&m& †•qn-ý—ÑW“HVÆâ8<M7tŒ,—PaC¹ {Õv$>̶˜Ìb«¦ xÕ¢=}œ1çÕ¢ÏB蜥Ä)R´Ì⯷¸’FY—$¹Ý˜ïMÙ³‡\À1¶5)L׏zÇ×VqÔYEeéÓ«?8ºáèÎqH‡i‘,f[C4‘±º#Ûþ< ^ZÃ[²K󦺶먝Ps‹Ýá¹B±ƒìù3{ÄeEeÂC8T!ZqªŠPà$,¶4DÐc†lN6À“ÍqHÿIl § Ä#«–û”!t¼€þÐé&õObì¶¡mùqAï–M«s½-:ó
214
+ „Sÿ9aRëi: 5>È÷Q$gôM+•öj]5+ÈÊWjáŽêv —NÙS诟)!'Sªeªdze=}rÊbî²ÅFþl‘ÄRÅF‰t’Sª‹ªjH(À÷…h){WüòÕNÆîÂe_AÁ³Ch[_Æß”®¨3y â?¥<Ô~ø§Nj˜g‡q³t¥¬oÎ<˜×MªEJ·réæ,+îÊ÷Ÿè–b·ãÊÚÜÿ'§Ë˜jJ«Þ‘íTöiéæÕŠÑP8Œ:$Ñ»ª±ËüÁrv²:H‡„M/X)˜iÒL옩¬éÀbvz¾òƒ€lnnA2冯ë=}‚Ih6°f
215
+ žÀ j (ˆÜŠ/¨‘C¨ñˆ–l¢ª=}ö
216
+ lD’úèyEJ®ÓÉ,ÿH°NT øbvôjIJØu~Qȧòl¸²¨|o т¬JÏl&›gm›×""E-íz¯ØöJ§ÆÚ%³[•¡Üò¦nœ6ChŒõzDœ?! ]®ä0^Øí˜ seͤ°Lx<Æ¢Ô ó‘ Þ5âœBämQ36£é…Da³ÔuôfÀöVã×ràû©^‡;>Õ0
217
+ \sJ7nX
218
+ ªAdb;%keüCe‡T€Ñ@ýüž¡Ä† Ï ¶sà1o{G¿üՏÁ«T%4ΟäEÝò…=}ó)í3o ¾Â‹ëú¬YnÐä#ìŽÞ9Y(PQ
219
+ \¦ ä:ä$›©= Óïëß~‰¸eH§8M¥1žø£¥ %(1è¾Ìj/ƒÃÀ¬€&¼1Ó" kÁ+¨ëÌ7»VÝûÓùK‘ó;Z›A²æé¥ dÏ¿n›>íÀ@®R¨ëv” †^4÷š
220
+ ´"Jp¿ç®Ãsë6³ÁòÞðdpf òÿµV_JÁ]6_Õ½/=}ÃlÐ8ÄÏÎɛȽCÔþ¤ØÓÊ՝æt{ƙL¼ ÖãÅÑØÓ‚-Ýc Æà½{dxÆõ›ÀATÝRÏá2b6?7tÅיzy†èC€Ò$?ˆd{xþ¾%I&‡ûë–-V ›:ìgA‹€Þàé¼Í°@ʤ'E'Ü'z(‘šVÚ" ¹ö-‰:|“&1ÈG3<‰x‚<a©VÇû!«†R«ü6Ka¤Z5AýAÀø¦ü´mö˜_ìY<Ø[™uâë 8–¶”Ø× †X‹ý֞@ˆ­­“ûyŸ>»À¤¨¶wnÊm<tö[ӞïɉI¸M‘uñØS'´nP{mê9gqs÷>‡uû%K‚ñ§ƒùÆ –xcêR¸ª æÇûÝòå/(W×ìÿ¡)piAU˜YK OÊÏxBš„#&۟¯‡nB²$âoÃÉZµ[—3àdTÏëùqþôP0ƒ7¯a¨Hsï;}66çRÈnâ= ˆ€d-“ƒêÙßÝcÎ:òHAûþ×ÙzÜA'
221
+ G
222
+ ýyÀ|@Eã+±r³(ì({a·@zÜÍî¬ÐïXWޏ…7+R¿Px#™+‡„{uÖ2õŠwî=}Ríèx^löৈÇmw O•‚3¶!×ß$>cxԆ7¦-¡.¼-”3ŽyR)N(ö$1áŠSõ gzÒöžAªÆƒ™wЄ»Œ'I¿VW,[5ƒ,ïÆáCéZà RE±çšˆ&xûCuߢ“†x25äÓOõôdNµ‘}= *ÖäeÊÇÛåþɽg+Í”f¥™²pÉ\®”!Xª–¾¼Ç¸+R¤…:¯3ŒWºM-„3ø!yZl‡†0&(Yv\ê¨[ÅÖ¾ÝDlÓE.Ð2ĬJ_§ÛN¾‰:ÐOÇÉ|µmHÿ7|t= Û!7%Lo„ˆ-#4ÏU-Ê>¯¥RÕ[¢»šü§<ÃÌFšÎúM ê·4W©¼£´p@œ²èô§™H{ù®—…€…¸šïäGº= ")Qúl3ª2{¼¦1EO™è"U$ ˜«««†+_MR¢Bµ% s±i®ì׉4ZáňßÛ³ÏzâVèŒfíÆ$3ÑÒït‡~´Á¸ÝLz9ßo>´¤=MQ’dQ/V¸ŒÚQYÍûU¢Ÿv´©ÌYªÊ\<QÔ»ÄbXTɚܮYÀdµ7vãžðð®û¨¼eÂÈU›Ñ\ÚT¿欤[Ï4Û;TžÐ¢lÛ×<Ù8W+žÐÒ$,ÚzUË^ÄT¬y´AԟÐv<قœoulÐ†\܀\(l³iäå7äŠC;4°²~Ñ!Òø ºSEv¡¸kjH,ÿV?B·ž/;¬CZ}¥|üÃfÎå÷–:ja$½%m}Œøx«¾ÿІпßtûb,®§B|êOaˆ‰ó&ښ²ÁËJ©Ã7àn¿DË=}RgY²½ïˆ_òAð¢b„gp•¡@9ïôíÐG¦ŠjlOij“U)¾˜= Å<<èî¿ÍBŸæËOSBYòB¡ ý#667iè$êçå;Žp‚È3ä+=MᮈlpˆÆ[ÎRÚG˜‹(CZ¿Øgk(»[2G—±e丂›±®b‚{è —±ÇÀ7šÒ8®…É T·û‰«z^$RO‡¡y°/-–‘ÿ‡){K¼U‹èȖQ{ï¾êNž$c†4÷È ¦T.0Y ;àx„=}ÒÂçÚ,“ņžTc‡Úÿ]¾—8Ôjià9¶Öo˜{à¿­ Š*ó¼è5›¯uN¹ÄÛÅ­²˜î¯ÃéEP{>OFÐö§ŽL‘Uê°®i4~vwMúr"HŠ(fƒL+ž ïÙ{é]¼ü[ðÂK±O Jgkÿ¤?xŸÿñ³wñKûò™-òJœoÐwÓ ôÏ»»hD°óßò
223
+ ²|G<@–´T޹Ç0d#äVh¸FÀRP‰§í±µu ù¬iª±7©å¯‹ç¹-Ô÷rY/ó|Ž· F2ƒlÇÑDü˜Ì®ÙB"KlNÝñ®úÁ6M›-­ÛòyÖßùoO–Óñ§]ͲϠW7Ž:ÛlMÄ»Zw¾|WªL›OÎØÛlœã/Ù@)öûjˆö8º\= „"[ã6IRۄHŸ-7 +À°a
224
+ ܉ƒHdz°°ÕEµÕÎK;—)"^’£C²ö)h(µ²§aVÃD€Ç \Íè<ô¬°eæ¡^-×%[ßKÌ=M¿wԅ•ö¾ºûKïŽ5:¢‡Ð˜ÓG}yۂÏóT.Î ÜÁà\ôon
225
+ ¾î?@âo3[v“iŠ[ĞZ<añå C†GÛ@<6¼ ܸ’Àô.¼¼ª 4#¸‰ž}S‰F·"YÎì+[:¡ÌZŽÔ(î| ;UќIEùÈóŽBLÊ5åïøY·*¼Š^°ÿ•óõ´r>§^ÈíMI½çúµqPjZsB=}³CsX܀@#F¯•¢P@ IB)ðË= Î±0ô§­%ԃ3sTÜÇ:ŒX°„4®–ر•ÏDQ>P<hœ,æÕfýѐ¬š[¹´‰ü´LöÝ1YÍ\O¨Ù8\jEJ9ˆ å×ÇÖÊ\…è‘ MSêy¼± ÌÐzWůϪüûtRà¤ì#Èo̖}âȳÒæÛ0ÂºÉÆ
226
+ A"°Ñ¸ Œ*M
227
+ I2&&Ü0ôóÎÉͨFJ«ákKJ‚M9"\ωbaô0eÒb)30¿ÕÛ'–òu£»n­Z\ئ$Bû5#Cvó9Ë8T"†”’ÊÏ)ZË[èßÚو\ÓD[C,›=M–ÎÎót½ò}¼65÷½XƒuÒZ?'u[‡”+ó¡!±’VÕÐõø¹¹Ïõºö¹ ȌÎðZ Hþ *TB!j À /z fÚ)FF7…­Øþ²cvÿû¡fŽí{k&ñ¬Ôöÿ¤Ú³<à=M_ã ¿ˆ)Ǫ ¶lY% Ü4èåºoŸ#÷æ6oé¾ÏtvËÞ²tSYõËwЬ :#osd“X;¬Ÿ…ãüYOVâ;¶ÚÀ1ŸO„ˆß6‹$ÞÐÿ⁓ÛTã.ÂëV~d¹]›\3JHÁj•’·c"8Z¨3¹¡ 2r{;–Ò–¾Ê®ÙMmïcñ|üjín¹•ÇY8€:Aêñ.üÎ>¿Ö[†%ÑØ]2¿ÂFƒ£W1ì¼pÐÀ:|‚8ç֓B»c„¿Óûŵ˜üaŽCªLô™œpɱƒ|E’Ç{ìþÜvÛèŠLe°¿BBkäµ1™™hˆ+#ò>¶Ò»ãÓ‹ÂÆoºˆ¤}ÞÅxnå² D,·Y,´é¥bÑOó2Ž<i*ú+ÖôÁŒ¿žp^-z3˜áÇA(ª57ègˆ;3m–Hàþ|¼A 7n= = 'L 䴌9®Š"½O3ýñšcGg‚ò±ÌO:nø¼k=Mr´å‘W”šA}³øŸúÍlï݋$âLƒxDrP:!ÏÏR:SVÜ­£5FUS1½ÿ0þæ¡-S,g§ç9jënŠÿ L ¼1(hE½ÝãÇ>v…dçè­1»cì¦mXï«sé –;H½)Û¬U~ ¶¥Ò'²gáX{tÕ1—÷i§º-RÄSºŸ3º¿“nÇ:S•Š¿¡s*‡2·F3º K¦ï¢Rº½½KÉïhøô³|• ëk¥8¨Ù¾@¨Ç[‰A•±+³E¿Á¶w•¤“p*ɸï®ÜÔ%m%®Á_Š>lR.ç4Ž[OþXi2þðÇÁH\„#‡°?mAÊoFË9¢öƗr,wO¯„çÿ˦:\ÁB¦¬ÕÒ&w¡õ%kÆò‰*Š J:L¹Ê~èþu´N'Ño'®ð—.8’w±ÇkÖ¸ó‰X(ô3ɝϝß©þγÓH5šö i5S:aÞ M­ÀãŒ$ºêžxlý}ÆíJJӑŠc‡’%yqhà‡èHn‘G®F’!¿/> Ë÷¿b_6Ô®“62ª¾x°_çk $JP ¶„áBæB4q¨&!‹¤Û%žÈÝ«æ[S†‰»±ŠBٞwBªJZ7ò´ØOvü.ý´ÔnŽ‹,}FïWþã†Äª‹Œ0'gáy/*½×똱HC†.ã0øñ~sùA˜'’‚.Ã)5gß±§í˜ƒ1tWññü_RÕ#‰­V B)ºÝM(Â"¹eŸ±ê%êåÐBŸ±x¶.žz­f{"âÞQà¦y?«0†î]j¹y ×4¤äí 秉¬»é(Wœ<"ÅCæP_ê¬mŒnsRê×Ájíhñ£ü‘çëÇOØ7K¨ˆíÊÏ^véU%èrÎѧG"¢ˆûñ¶óWrP^§fnª¥ìj{G7H$³¸¤¥*ˆˆRMüH‚ŒÀ"ë¦ØÊž8®õ¼91û±Ó6ƒH]QChçª7Û¤ÇޑËR1‰(öò~¿j’qÚ¡B薑B´q˜ß—>ª6Bª-uK2‡jø;1ÆUm>ˆ*…À$Pb¯5H.%Ñ?§vOíIŶµ[@;œq­31hK#Õ)GÍ*˜ËGҚ#”^€yiæ´±zIlæôқát²Ï°n³ÆÞy²cZ¥˜R)ún]?ß²ËÙNJ6ÓÄ|ìöyƒ¶’ëѺhœ”ÀLæ\¨Õ8¾+|ay³íLíLíLíLíl™|ÒVTÐ¥¦ •ª VčåDfÂSÌk(ª¬O˜¬:Ë|ÔQ¨ÊB *¾©Îlœhž>2ÜìDÓÝ86ó]NÙ±K°#’J¸“J²5¸“5¸øiJ¸“J|Ö´žÕœÈÀŒYèi*Û¯WíIÆ\NL¬è¾7&œ÷•+ñŸ¯lÛâ/»&ål¤àûÔõñI9lÀšÎq|…ˆÔ"‰P#,(Htƒ$¹¯²Â‰ÉúÅKVI=M­uœ”)*³iЉôk@:±c‹íŒM­_ é~è0užù"l?°/³uwy°×&|[¾T)ž)© ?‰¤CÉ¡þyŸ9¢*Eøå>ááæEVَ»ŽCw·l†òàðóú¾ ˜e®ºµ€__Gîs;µØÁ¥À†¤!'´@w'"x¨í,"$ã!chq¯ß.u.1™ø—‹ù
228
+ ²ÑaƒÄŽórfΣÌ/¢ÕV,Lrόþðˆt±©ӽ鋅Öݲ¹!÷¥˜I”ÝÝÞVàm´ÞVê4ÞVâtNæôNûÄMã„Nï¤NádüXŽð¸öȎ÷¨ŽåPàpÎÛ¡¬Õó<¾@™h4Îùû$qEògn= 1¡ïžÍ= 9¾áäµà¯Þ«M= ì_îjñ~ÞUö<½L £[m)¾kIÑ¿H ¡âUo²YiÂ=M½Âé™k¢=M®¾hí<?™¦Pƒ$,eYYcJMÿqŠÕޘ> õèÎÿ۝7y^î<ôSÍ]ôy>^h8= Ì}]s0,ôҜÞ^+·;#<I®ü~¼0V¡7¦a@ž5$ƒïe¬å!>Íéd埴áþÚ_q$æŸxD‚Q 7{oÜÂå ½jk'ÖÀ>ÃÓíÌú}ép5“,'8ŸNW”qøT&–omI¸㔐ëÕmE¾pбìø5þá,Àõ»¿VöÌó-˧L}{Ó/W0”Êq¯»1Ÿ5*_Å0ÚXx›w­Ô"iBwAéit–—ª»”sZ>ٔÌ*KLW°Ô/PÂ|÷¬§‡Î´µÓ6inkJ¸“vSI¸“ʦy»T»wѶ©6ºÚëÓT›PÊìÙM(¹vâ¼Â «bÍPöQÒdxdŸè²m¼ádÚìcä”aðS]º$ÈáÅyëÄTÀØÉý…çCzåt|ތyì\:ãv´ˊ=}ºàŒ»ì¤ãžD¾¥t¾Ž¾ªÔþ×)×÷»ÕÞ¯\= Áõ!*>]
229
+ IÊôãâaE—Í$sÍF‹M-^ÍM-•I-ù7 ) î›.ó ʶA,¦243RHº½¡£ë”øÊŸ= øçJ€ž@Q³T#…ì$ÇÉíR#ý/’Uÿõ±ýnÇå1Ö¡£:Ǩì.Bj¼1PÉu‹w@¼lɎ#rL1µáýõÝmw#WãƒABppHÁ>ß;äM=Mi1Ó«þRH¤Ñ€·XîJÊÀ7¤ªåj{®ZɅ³šÊJp£køG×µ­±&°’ÔI¥Nê=};H´&ò}”’9yÈU’¤Ê–+~Ýè‚n˜jhÐQD§¬¦^V)j\Û¦T™·ÀÓYĔ}ÝhÝì½¢¡Á¬ud<@;›j6™ø(¿»u*D©d¡onœùÁìÏ(çÏ*üÁz›%TÝf‰ ÙÔÜ|§´¤¿ÓÃÐðYPþÙ!ØgL¿·tƒy5ÜÕfÒ,Zr‰\s>Z‚§ÅŽ ®@6ÖÃÿՈXX¿Ô8¸t>ZÆ+= zœ“,<= »Êfϟ¨Ì¥åA ÃçÐ-Œ‚O/Ð^ý=}à[Œ»|ÀÆÂ?¨|’kÌ=}ÝõV=M
230
+ ´£d}KîQKެ”ÈÛüJBt$ {¶íºÖ•ØËÔÈÏX_t*™ØƒZ7ÌÞq¾´åûI2çmë'ŬM÷¶múv«~9¥àY"%“r肶͕¦I¶ü¥¥‡÷÷»Õ9Íp€u= Ö”?ʦ¶¡ü§Æw>ÌF6žÇօ2qW³DXð.©ünþø'+Šdü%¨‡õõëT¤ˆJ*„¯ªÑtšÄ…6'
231
+ mnÔÌÖ£ó3‰
232
+ ö¬ÛyªZg4þ0‚8§i•µ¹­_BàˆÜ˜Òՙ»ŽÊ¬’Y#’yâ£yµqT;.rVÍp³(FP#¯«®9«Y"^I $¨o‰•sxIT…â~^ ÈÜ8ø#ˆb6|nɬ™‚ÿ·BŞÒ&¨è2‚
233
+ -Šr –mØÕa ¶5k1G⚲¯Ïq7•ÎÜøtـ“0{ÖcG:¤ƒ8+…ÜÏk
234
+ ;Ê!¢e4è3ŠÂGW[¯PÚ1ëÃY—Öaù‚O™™þ>€·…Çj#¢Ò˜¦2‡õ9º™Îk#,_ùãÓ1«Ãò¯ Ì¥$ÏbYªcJ¸‹\fϨàéäUÞðÍÝßµ ÇS’s–üD¨ÈÒ7»°&c1}ƒJXΖ¦L‚‚^÷ë[|¬ÇÈÔ>†7(²Ô*à2^ÂÔ63wÇÊÃäM‹)î.€=M*°ÀéðBÜ1û—õÝk²U›£DÇSÑWgCjîj^/ª°•)@–£çjršØøÝáb ­EGÑE‘·÷pƒ¡Øj݌#(@o#8€,€€"‰Þ]v‘Qi°–œtÞÙË;ß("åÝ]·¹Û… Vª‹ ŸýêRf= í†çrô
235
+ ¬…+ÛÒÚߙ߷ŒÏ嫯= »lZùØÓJÉ4Êi?ca{YƒOú)n8'€-ri~œöĨoeÜ£{ÖóÀ’ŠÎ·“J¸“J¸Ãµ“J˜˜”¤£h̺VÇÑ8ÜN6rRÿ€ ßrG–3ÈçVXFÓþLÌN¿Ð›¨ùdqj=}X—…dãEoÃEŽ3GŠ$h€m«ÁéCùF¨úz—‰tQ÷/wÿzgQá*ÿ"Mxú£~¡%‡õ»1ýVÀUÒ%\ò,ìÒ/j® ¤Â‰µ€gXX‘€Ì+„/ö|wOa¼{'ðSå|lë {M/s¸²ÓªÛý2ýÌ,Õ¾ùfØdѯí*­ùrGBÏÂwþz¾ù2OÌ©|þzÃÉù¾éÂò7§k±¡;AV ؐö/UŸ|t( ›<,Åöšƒ|%°1Âî¨9= QĕÜ:9ª›˜pn‹∺ÌëkϦò%Pît‹ç”ÿ:kql­VŠÉlhr¼c±yz"‰fŸÉ´À(š#+¨7>Ùòn?+QE7úüŽ·´ÇÌ´ØW"¼…|£F{óô#¬:ûhh9dŸ°¦O½Õ°Ùü¢v;¼D¯Êà!q‡¬ŠûŠ4û¬Žÿ°·˜¹ZSÒIVö{Z¼äMÉ j)W§‰¤c$j²•ŠÊjÅè´À(×%ú£®øÒîܺk”=Mà4¾µF^Ä{µOX$»×;¬š€ªµÏÀ…‚§1ÿhÏÏñ@ ê {^´Þô‡(‰ã$Aáà#ÿCëh•4ƒ9û'˝žS^ŸEPãßÁ‡ÂS©ºmHp8zHHÑo[¯mŸÇ?kêIñþ
236
+ Ccœ™eî%°Æî55¬M†%œ-aѰeiGú Åk1Ÿ“:(/ƒÐçHmcÿÚ©¤«¨¨%lÍ=MˆÚöÆ—·W刕b‚n~b9_Ñîp¹“oâ%¯™bò[uÖ $áÆ/ZxBKœvì†ðû¡¢Ù½”ì^pðä{= nþZÔ%8qÿ
237
+ stýRC{ÊÃÏÿ¯*©ŽÌnÓ¯3©'[¬ÁÿNEhÞyaÑßúNˆ£Ï¯T¹e±|= uo‘¤ÍÝXÿjC(l¼ÞÆ×Vyԕ|F“œ¾ú+=}q8GïÆV›*²Á!×ÿºXà¶ šWP^ŒÊUk
238
+ õ„ÿБ±èÆ:GÿÒ!G¨ÒnˆŒ–làm·ý¨Ö•”S$×gÈm›!—tDÉÄxAµ—x³‰‘J@[˜³½4”?¼| m«À
239
+ ºÕy.g¶G¡D“…«’Y÷ûªN™¾”ŠôÆ‹f–¼r´Ú N(XÍá¯ü–Ùk̓þŒÖZ;"sz"v¦kÃ'SWyã)­™1˜7Ònî\ó2ŸÜ8FkQâ$V™¶æÆÏ…Ýlþ2®¹;v(&g Dí’l'õÚC09ܵ޴>w‚ž\çŘZÜ#Êñ§Œ*O$Á§Šªú„t±£2ýG}¡?ù¥ JA!Տ^Æ%‚Ñý šy¼€B÷œm~š¶0æ ©å|Uªô¿› ÃëÈÿû7ª,Kz)48©åRùH=}¼Š íÆïç±i‘]ü@Ãä°¢ÌÎï„ÕKâöÏtnöç«®YÓ#7#cÛËr¾6×m¾.£à^Ç=}àÆAÃU;Aý¯ž¹ÁÓΩQçȚ©î¶§è†n ?ù@‘ýB×ãýz¡èA•tÏ[imÍlc®f,ԁó8ÿälçÆÀ˜ü¬„·Î
240
+ ÿÒÂãÔ¦-Û{îYýZÿ,ÔÐ꯴#RêÑ(XMÞ= $Žâ¯P™ÈõXNÞÛì½·•Âú{"·NHP@¼m[¤Ayxô˒²AEìl¨=}›íÊ|O
241
+ Hð·‚FÂu»=M€1 t„õ„˜ccVúÆQœg8iÉ1¸²o½aEºb¤n÷Í5¼&2$¸špÇþ“¿PÂìúUxŒ6ÒLkXuä©ßK–yW›C…L£érG’‰ß=MӀ×$ÂÔ°Z*@‰Óž…´Ã1AR/›.ØðÛɌ3/\\³.ÜxÁ—»°ñª(P›uù/›«˜ÌåýÒ=}šPKa„›c4Ÿ”$5J™‹Fz;Ÿ'+þ ¼Oc!jaF ÿê¤'ži/a1©½x/'ÙjËéÐR0Õ³³-ˆ^¦[Ü=M2Ëd•uK ÀhÍ=}LǍ¯/#E1Çln—élY¡_eè þ*ÁCÖY%‰ÚDVžÝ‹Í5ðMZcÛì%˜÷R¿XC\Ä©]±^n©fL}mâ·F)öû[NÛ¦R›sÊ:¨jÆðº¯{Ø=MFrè×ú²×:Ë1å8Ë÷ð÷?qZÝu
242
+ Nˆ6 Ç@[µ ©­kÁ0 Ð¥æ‘X—{ŒFðM<Žö×øÀIÈ9¾ºÐ»#{ NL=  MªÄSÀðê­é‚ Ç
243
+ ‹êëUwXU‰kÀù‹¾PغåÐ ±Ü_æçÈܺ1€~XœcѤ×Êp¹bÎ,&×»²ÁÎ̳@•pã›X ‡R2ÂL‘Çëd€ÛfÚûv߅|ѽJ5æÍ´ùý"ÊlîÚL]\ÉÞÈ/föO³Ü3àqŠÜf⯜^çÙ8ÚÔ_£Fž\ÛHØ,=MËð£<þþ|³ºQgì>3·ûB†RÐïóE’U îg?“=M%º= Þc²}³‹ò!äÈã[ŸWþ‰dͯŸ­ãpoíRRx·E)¡ø'þSáÈðH{K°ß¯¢QkVw$£âìþ*=} ~ÞYvšVUðÀnÃÍޞã~ṇ6\€ÚDœoÛTl-ÝÉöӀfÇ̳.9Մ§Üû³ÔÖSY<$/pà@a¹lÑ*ö²Ì'¬Ý*0†$Nª¤òüD ÷¾ÝÔÜrÇÏI“¢ÕÔ¸ØU¤´,¦Hŝ=}ø{Ҙ)ô‘£À2Mz2Ütz”k@áÌÝ­à>Öö´? xõÒÑ/§yÎÌ×üµ\úHØ\‰Û˜ívŸ×豗ÜU¡[}[ÉËÌýSݹ+Y¸Øaß™ØÔ›ü”W¤L²ü֑ãe—)0Ù¼¯6èë…hˆ\¾ü~ÑÄDÐ5n\ÎÔ {Ù¤œŒaÛ_Ü<P§Ù҇ú7±ëê0fG~2uBH׆™Š/òý";d·vJцRG1j¥ˆ-¶Ž1é3ÌÜìݸ±
244
+ ¤‚ÖÀ°Ù\I0 \±¬üêÏ$ ÙØWÖÜÙ\÷‹ýǂh_ºŽS´(³aì㋺ާ7QóÒ=M»''•J­ºF´Í8—¸ýŠö—À[мvkX¬–œéØc ›>Ã|øÓûÐ'¯‡©Ñ˔[l_ƒˆ-7)¾™Ã"ÑÍ ba$ó;7ñqjùÉ9q™Œ<®ú™yŸ™ä0#-UðŒñ¸+=}’ßH\)^R»cãpÏæÙ†‰= ]È~½€É˜áÛ³·:n]ä$Ê/ñ^|\Ëþ=}ŒÜ‚²þq]tÑÄPP æ©¦¼ÌÌú*})CH0ï^ƒDVF'ìåå·ÿ:b,æÅۋ[XIö^ÁopÛ~ŠáSÆêSkïåÉ.ô•e_‚]³‹1½ò5˜ÍâڝÐÏ -…ó!"#.µ™ +¸Žm_±l±—2#•Œ¬æ|ëEÁDÁ Ö¾F€8´Ü4»¿§ºL´Ã|ҍ׬WÈ\²˜ë¨ª҂ã#“‹T©-.êžÞš°¯°\9ߛ⁢Ös{^mš}] fcâb.ÐD<Û«¨ŠÑ\¼¸ L,:$°œªÀ;´‘g&³&mˆŽΓø•ˆùéY4žÞ†
245
+ š/0D’^:£r¢d1ànÙ=}™7ì⺷§}ãDþ´&½èbÿŒ6 WßÉΌ:șãçPW©òìôØþáäUÚH•Ö›•›„ËLÈçc xêìÓ÷}t^ëèT™}½<ÿŒºõKz¬<ˆÜ$žÓ™xK)ê¡5§íúó
246
+ ›¤ š˜«"&ñg_YX{‰kÿg'Á›!/uGÍ3õHbtqiwâ/un›ÃÍ®HuŽ=M«„= [qˆ^PBJ°Z©ÌX‘Ãríœ8ô|ï½'þr€ÐŽ~ahV® L—-µ
247
+ kÛLæôs†4¬F8ž¤|‹×Ô8.¥äٙZn x0|’jÙÎV“@-²R9‡«Úzâ= êǚ<ßí@®ž§{L98ÕU6²­Gjàñ‹Ã¡I¼O§ärØö:.º&¾¿•£‘Î 9QšÓMì-m¡¢éЋ£ð ˓Ì5…ÄbýÃÓ~Y6çú
248
+ KTN.ºb샵ñÑz^ÐìŒÀ¨£ºÌ¼Û#NÊØ;4¡U­£†¢^ˆ±}‡—ͼbñË+vS³2¦ô*ú¸õÀž\pÌ
249
+ wHdkK-l,z#¾[?·ÞdàKeΙÚÓ&ü”Wÿ¶§Ú „‚ÉÊ®Ú<úüj«–FeJ{¯ð”dgÑ|Ò퍭µtØRŒåû¨8„–LˆùLxÏbÎfWH®ö¹ø·-°=}»oÙhóÖÀƒ•È÷åµËtfºúÇ^õ,Ԏ٨¢]£(–&ÀS1ð­Ó;xüXù¨‰Ì:‚yo]Ã^H ½øN÷2º"áCBøY»cõc}ð1x:$¤sZºÏw@ ˆ¼Ä·~qR ¿^j‰vøò€×ogvùßF† ,Ïâke>ó„T7|°tf®Ñ—>ܸuÝ Ïiq_al@´ã»[!=},•”»èLe…›,<VC×ÐWD©=M/l«Ö 6{Uƒ%ÔR±
250
+ ߙg¾bÀò¢…׬XxS‚ïõüŐ¾žªÐEÕ¢j/3^¦7(™óýc¦<¾ÎÞµVŸÄlUßgvÉC淚V»†5ß~kÛcXøÚÍÁ7¤$̀æ¡ú}‡¬ÁÚ=M ]ü¶»«$¹Î§y9bznáküÇ9t £œŒÃ•$í=M6Qfx=MÈõôœœqð+½Œ²WöÑkõ©Æ×%žvBb‡„›>ïLØmwøÀêh*®Ê-ßw4»F†²OŽ˜!Ü¿9}[Ïo¦çD©=MK·"¼©š¡ð¸<k»úÍêØPs¨
251
+ Ï¡Œ©”ûÚÙêtq+³Xð}8\¥iÅàlG«@c†Šª’cœ%m9³#ƌ¼=M¤ƒÎÚD0AQ=}0Dá^ŠâTèœ_6h²’Ûiÿ}}·[¼/iöc<—%¢:lhp<‰¶–s]ºŽr÷‚ïÙ2‘k]q¬éJÐAÞÏІWn½Ë„“‰êì‹ÿ#ö#8{âö¹¢[¸Ìªt(:œÐa8¬V‘¦F{\§
252
+ ßKG¨@4)óÀŸ†·¼òE–jÌ U:©§f$_èÚHIÍ©  ¼I\)ý~œHғJÿ‰N±z{6bªHìÙU¿È°ÊváÛ©ôd/¬ý#f{yxÏ;޵óŠ6°¥ÕÞÀ²#ˆ¤Пƒ*—ĪOæq¦[EÍ9ÇhÁ´ÊÚï5%=}»ð9/Ñ!eöâs–ßQÙ«£þ2áËyDÄKÆkcܾ5´ð•ø©˜nÔ³ò˜QsA5íÍo\O7ÉdõÂø…·¨ CԌÛníUy/X‘d= äÄúWõ®&=}P,i·iÞ3®QÒIÞâNO4–âCñ0®Ä•Òäÿ¡XaL)ø,þŒ+\'¢…«·5j¯*®=}—í,;;~zªMD7Ç£ñ˜Pe.7¦M…k9àì–ñkÇ‹Ù3Ü¡ÁÿÛT‘ŒÅµ×Óu …ywDi˒)mµK}=}Ž%A³·ùç:Y ´J~ìôìÁÅOƒßb0à€}x©¤ô™Ë:”hŸ{UäÂqÆß¹¾Zo´þçŽð²?ÿÊî€É4L;öÿQ¢º;ªL=M}m§°¦ ûO@x
253
+ ɐs+~¿kéË'T‹$>b׺fˆ§9ðî™w›(ÒniÛ™XË+,ç41飺”$½¸;¾©¶=}ª ¬¹m¸Ûô= wÞñ·aY3 ün¡"ØüKƒ9¢ÊÙR˜0)7vâÄÍ­|ê¦o¤ñÁ¤Ä%µËÅ£@HÓ础%»¡ä㲣¤'Ԝ}Á¾÷çžVŸà‡»+…/íOˆb_T‹žs‰Î$-Øö˜p_±ÜƉè̓’]À ¥”þð‘ Ãc8X,–ôTv¸
254
+ ›¾Ë/yVh¬¹Fd —°j"wç ƒ5¹œ™„¶°Hº¥L¦ÄjÓ[þÕª·îÑ«$=}[E ç]|O¹µÕLý–÷н+ۜW͍±¾’ÕOfБ=MýÏHlÉtᐒ;ðd¿(’ø™K@N=}ü” DœÏfg‚¸5’ç£''lV|Ř3ä¸fgò}ž= ús
255
+ ²ÀÀ«Èì)ËI1þâ×¶XȦW‰|þ¬UކÿdlQt ¸ÒD‹ë°œ–ÌeK¸-&±_Q@5ò’¨lx ´j÷ÃX”‚]ýÚޗ}$“IÎH… ÚxIUÚËÔdY-çQ5Q… 7 ·[(~_ýàB¢X0û겿ʿH—®þ:jãr£§XWÖ6rã¼Ò™m¹>rh."è—ÊN¨­õê#Ï8Ä8r“Ûh/Ã1%—}¨LZøÅ‹ž(Ì,QÈïGŒ§º3Ô#ÄÊ
256
+ ƒM ܧ…y°ú–Fm ÅnÀ¤ D-µMA lŸkú–F™d ō0<¿÷.UWE€üâ$9q!2}é…A® ز•V= ÔH¼©GG1ö…{2Ò¶z:bG™«ØZ£¢»cùp©†uQbnPù ºŸ8Ö¦¤_wN°ý:-® pcx•¨Æ
257
+ Fô9–FmK߈ãl–s‹ŽÊ Á³´^xãÆ_‡£«Oëœ^¸#r;n;SËQ¯âr‚ñZ'—kXK§i÷˜ŸÒ §u0×úQð>÷»h”Át¾èNºÁ@yi‡ß2]‡¡@'»r¿ÆoøE§u¨Y-ç1ۉ@+Ä/9pÁ¾±Õ‹'pÃ1)—&‰kX|ó~á´Â™$Võ2!—}G»¶—?IÚҞ‰‰xòÆ_¯“Ò@kô¾½îðô'ûÙ2öP§:æÉ¶†Ï\”èÎÑD¶ØD›Â‹¯ârù{ÌÔÈ÷Ë«Ðlië\.§y¯’­ârD T–cpŸ NlV#2^'‚‰g¨CXk ÙšÂRíu1>+B}ñ…àÌØ_ˆ•œœÈÅ
258
+ ¨öËf!—}ck|ɧ¤3âèùÙï—MpºÊ‰gYÒûôÏÍËÚSkä¡\.bòo …!šWÊúò[ü3’JT‘jiÂnËë3ÆäºŒ=M‹Ê޹\&4Ko}¶‰·XôX Ã8õ™WWå)…= à2µŒ ¦ä«Ú…FXK§}¯z-ú®\«Ó¨•Õ552Œ[:â2u0öâÈSXͲh­T‘ØÇs\.£yg&Tô©Ž3@lÌ Ç.¯DlèB¯âÂ#sJ¬¾}¥Ÿ&>Òç)'v0þÆ_¯JT¼öUãFÖÂ×Ú%Œœ…Q”öÂn …UÜx»°ñµW\¯¯¥²Š•p .r|ªF *ɚ¡Ø §u0·Ýº}+èûÚ[ùlw\˜YÂcS\.b2^/}‡Ëü= ôü£LGXëÖ˂@+B˜ôÑÊöØÎŽ| ü ±Ü†Ÿyg‰· L{—þðœ;˜·"ɋ>ŠöñnG‰$L¶Ó¯û¹Ì­´úÛæK#ò_CGÜ:[!ra°ëF‹Ëͤa÷¥.¸6ûÑÙUœöWÁ¾ÓqÜ#èóÈ <§¶œ-šbzžÌ¤ FJ#2{ƦgI–ÂÞ'0>â_àVïÖщNµ —Ìï­I3Ê(¹—ë¼hWêÊ[6ނݵ15öð-c»>Ÿ2SҕpÖ㇍†l˱Ñà¥ÊdO¦ÿX ‹ç*= Ðn¶Çµ«Ej(…W´ç‹ç‡ý×Å£ð¥¯ÊË­·…¹Ïj2ºG+~2à'£ÛC´¹…ÑH3ö-®íGûâ'ªEóõ®šËªà*Drƒë\-{T£õ6©ºòÿ-â…I¬Å­ÇP… Øå[ÀEËub}ñ…‡£#HNÞR\z[~ .è¯âòc!!ӕaËì2Óì”È©êÀòQ½…+ñ¬™_§€Vg
259
+ –€ß2]çPÇâL¨·ð~b±m— -çqDŽ<. ä4yk/VP$â§]¯ì×&ˆ=M×>pÓS¬—„ÆC_—K%Q¥ ’s»tœÂ›ëÅt­âQ;ÈV ìÒ)ËÎ=Mêö⻯Qïrl«‹ xz»…?-ã1¯7ÛZ·2ñMAěbY-†i2VljßFÞ7[ÛdÜgj¹Ðq$—!;q˜; "H¨ˆWMȂH}èGø|…í
260
+ Ô¾X¢º‡ØËÝBÄ fH>!,z°§ðÉÇ« …h²N= ¡ñ~#\%ĸ+ŒØãäªC²›¼¨°–¢eχà Áãæ…ÞÙÑ=M‘áªØèSˆ’Á{Vç؂@֌TqEĝN\ ÁËP—÷‡Ø52dâºÊ3ck~40€‡ò}Ñ]›8²BÅYèÜm_n»#r^/}“cŸLЋjÄËHè<!"}é…!ôK};ϳ|[VMd)—Ø>¸§<ª»![Ìäg98ÁÐfϐ6’\Ñ¿Ádx¥ Χ‘³«‚á
261
+ %ór|vº ÖóÏX¯‘Ñ268K¥2mâêû
262
+ ǘj@;¸%Ø©)‚ä5ò*w¾:}#²YØ$4˟Ý2]3ž$~Sc= 0wPnåqßÚY Yób³¸üÙQ‚ËàjQ€„@ç:-ëúÜ×-º(hQìWŽÖyžŠ…ÃÏm¨l”·õr‹a …Á¾G ‹ãšLK¡´ìK"}ñ…%ØqF‚"ôÖ«·r¬•ðàBJPt«u‚"¢¨õÖj–S¹g‚d5ÒȎI›óbø|Ôü½E1îÆ_3Æ|R¯~Q7χÔèK"è7™ý>^ë
263
+ – ×ƒˆ Ô:-dé—!d빒Fø Ð‡âÆûC2³´Ï1çw—[[‹ì”»çÅ_‡h[7‚$LbîL;|É¥Šôq?’šÁf/Œ$ì„úÏE?€Ù NÝ^-éb>Ñàÿß]mÝíÞ1ýŸ“øéãl]Ýâmýýÿåþí!½Þ]Þm[ùDÃþ…Å*]t±éãWÌ~€4ãDìBº³º­+,Ñ9¤ÝTì= s™úñÒþ°= ¦$+ã¨Ýä*šÓM®èšPMq ›ÏmŠ2Äë‹/Ïí°ƒª% !Œ¼ŠÜ¶ýpÉåí];P‚‡¨´å¢û3¹ÜñvuAÖTԓC$™SAŽ¥ø;$3pðsOËkҋ´F)*zV6×^áþ*= qá›ÅÝv3DsóßsÇ詉´i =}€—î6s¥gØÇÆ8Ùø‹>NJŠý ¡…×W|BՌr2±sZ=}J26ñ ^¿^˜mƒžïƒ<ì]ÁÀ#±ÖHbÝNu_Ò§È-@×ë©%Ë{gUy«€KWªæ…~ôâQMg’#5­3ƒ‘íF¿úUѹ†™ P»V$;®Œu~Ð5¶nA¥xŒ9½d6Ñj†PëéßÜàÅ萚B쪈ŽCTˆè¸¯7(08•;ˆ²ñCÁC¡BQêöÐsª6ÊDYJ™œÕó„V+\D˜­Ëœ ÜÙºŽÙTɝÜÞiÜ܃xòÝܲ4×4óáÿ—l>mRâû—ˆ¯‚zBÒvssa²øs¬Û¢rƒß Ur>÷^$ ³æ“ýÏ.xîÎìÖÏôDŽ$Í»dӆ¸Žšª^ì{‘óˆ-,{Ê>Kaæä·)eι^7Ô—#x®m_1‡Ý¼í:õ ÅÝËd÷ÿ/†gډèù7B^³$, ˆKÁª„)ìׄfíÎPÆÒܥŰ{åX¡~¡j}X›ôÕÃÇZ鸯Vro;ØîûÛszFÿÌ&y‚ì¾à…Û¾_}}ûòK繪Ú= }t(Îlšf'†à²»e™L=}aãx'¦ûniʦ#1¹üoB ]]­Ýã~ó¹³\,lj‹aÅFWæ€ÙœN•Hæ0$xïӐ_ü˜#ï™L [ð_V÷µ= ‹³Cñ©I<+f§g'L€Æ?bû!cµÐGzóöÂÆõ = ¿$žñā=}Á×qÄÃúùt3£B0üëGÓVÞ¨= ˜µS§úbT¹QO É6
264
+ iv=M›oD®x6Li›¡ì®¾…¹Hͻ݈#ÖnÃË">Œà~>i8VÞÚÔ.™šŽqL‚²‰ñž ¿æg*¬vL³!0#l£†~óÖ{tÐ:Œ­$Õrÿ
265
+ þrºÙz³n” 8KçeMù!Ø{"ñzç@±d|¸ýÊÚuÙ£÷+U7ÀÄRì.’)û„òuÚp¢x [ߌF˜fÛ@è@ôÃÖ‘t°S€o•œÆs‹òS1±÷sØe¸;N¥»º©­&Ï¥·D-—}qœ§INüq7V?0a—°ø×|' Ò#3ŽÓ»4Á©¸ÖÙyÌ'•°‚#_ÿ”³v€
266
+ Oó˜3S¨û}=})í·ÄëÀí\xýZú¡:à5|ìÜT€®ˆ)Cˆ38<¯³ù¢Ø¡ñ;›ºw;瘜ÕÀÆF¥r[&ù°hΫ9ª—Ò³¡VÅP5¾ÿ4¼eí„n«êÅçiYíaZ­ÙüdÙZIUuH¬­öo*}ÀWë[@,?¢ØUTÔ"\²]Óö~y6Ë €–sû µöòcÈùRi3¹}#÷Z$ZóړnvÈ{=} ín8E‘ØÿœÇ‡äÎõ×¢CÒY¹1£‹KyÙ õ†WvA<R§ˆço|¤›t[ɋjPÚÌ骙«C~!7R´|ü´ÂÇ“ð7ƒp¯õžNhñIïØnei"¬‡fUp= ‹j"Ɵaxª-=Mw©¿Í é,7û†Ô‰ë&ڝéiÔ&ŽVð¨ñ͇™Ÿz…(%8;À®¬~J1°ÖëǤ:1|…&‰eµaevÞof uJw¬¥À”ÖÂáh¦ïM¸âŠJ䕯sŸíhå!›T=M¶sݚ)gbíü€*¦ÿ·À( wž©g Oi‡VxD%Yÿj³… L?0ÉY?í4L¡f€âÅÎÔ㿚R‰M6¢ô^腌±¢ºÊãëàƒÕR<?ÀÒ3±ïwå´B2Iä òÅö%ÊÈn)xfØÍšõ3h=M°×àO´õ\kÌÖ u’t$”ím?®sG£TLÿC.'Ȭ{¨wtYØáö«ÐŠ˜ۇ¨I—\|d= $O×dóŽF”·)@úzû$ìL€Í˜ëj|°Ž5Yrä*Þɘ÷j×Ðù|Eç°wxVÔ~…Hòq~ùÂ(g÷9­Ä*.Ҝe—»¬È*ˆî©È Y
267
+ àòż]w–í;»ãE$¿OÊD¼zALý&»ź5¡kÄkÅO$¨cf;0–˜Óû—rô–Ž—|)kþ×èøl=MSjà¨AüNFÎë³W¾Ì³·yÙËG¡…„ô=MÕ.g9}û—Œ¶†z¤¥ù²!Õü,ŽP XZ<€öÎþ¾¡6Gˆ×å@¯XÉûñT804&¥ÒäA±¼Æ÷ò¤Û!µL·‹'…¿'uÙT;å"ÿ “_AˆS:L‹<àÜfÄægw_È ºal¼ yOv2—튋ˆ<u'¸z9¿õ@w*ƒ˜Ïó„æ+G©ý³#O”Æs“À/cÛ¡{Á©ªä©SRA1Œ&È( E£*¨†åá®?4¢)Òû{2Ù¢Ø3_4nŽc·ÈWAƒqVÛðY<rΚ+k¨ƒ°4“¤R€l‹’ðõ<+~“äo“<õ>Kj4Æ ±ØÍË6À_5\Ÿ
268
+ Bél­Ì„ר&í›"¤ãÙh«-úUíÐÒq¨Õ®VìÒwTÔôuª¨ïI•^þ(¶-ðja_\hð—nÇgù»“fÛÛȕ¶Z€±m¬’O¡9›!F'üW–‡Ùå þŽ©mw9gP¬Nœ'ï¶
269
+ ³•,°
270
+ g‘XŒUÃïÛ(Ï´]iDòÚ?«™EÈBl6Ý ÖÍAäZ¢VYØ×íʆT®ΟU‰
271
+  HÜ¿¬.WzÚ­ö. ¹¿ú©)hB»•9ø•6ÛérAcŠšeL¯ç
272
+ 9g¢yŒa¦%®S+c›§Sƒ9²×XÛ§Xl÷t ¢X,ãÎ㼕ˆQîŒÖö™Mœ§ÉeOG©‚F9Äe³e#+üB‰ƒè7|0˜
273
+ r ÐKäž»I± ih£¾z­]ÈØY“,ƒ¿:ã&*»P&Yâù6VÃ>˜PµÚ8çºìêöø\s}Ê«»üh¾ã÷ù9VŽžñÌ,³Ùµ©o{áVDO–Mø‹ú¤u™X3t:6í©5j%)ùÿeWÒsd{½±H¦]¸ä#%2-“ýw¡{¦›2c1¶ZÇô{~ oz¨õøFcó!šS~Î8í¾w –þ¨Ë&ص
274
+ g¹¯´™†ì±Ñp·¯Æúj!Ùê3û|©Ña°9èóPSà‡j¨ÎZ®%Wç–Ç&Õ¹0 Á(“d¤=M’_’¸tð÷û†(×Á‘Ì»Êú@\åPË}ãH:¥/vª–Ëߓ–®è" ž\œÐ=Mî¤kÛ(ÝN¸µ[ì\Ú¢µˆ _<U¡C×·9ö‘bsR¾5rqêïðÙd@Ý
275
+ ¸êÃU‡Z´=}ÆÉ‡
276
+ CU¡ÍÌ]Âuf¸i^ÍN¸<ößiIÒzWš’HÈDŒkœòPë­Kã.í»+{J¸…V0¸“J¸“J¸Ã³“J#’ŠÄ8+KÉA¥NA–ú¬ Í)šôš¼¡%°|ù(‹JPs S±E¯j=M-˜2އ[6+Ïû¿²h$ɳ0˜= ê™L,§D1ÌJÈB„„rÚœ YÏxSžòRFxž¤ŒÚK+šÐÃ:„‚&öôê˜GºŸ´;̈ú‚Ïà7Кr´Í6I)ó÷~~àrOŠy­E \ÔfËøª¬ÓFܧìpQ¯{‘¨EO:.ÆÔEÊm‘¢Ä‘¹#{±
277
+ r÷|‹ú–“
278
+ Œ*ÔàñT'’ 8KpLjúwù@Q(HÎj{”¥¦Sٝ01TÀ–7F<˜â„<$êÐÉSLVa·ËE–k´&[[ʉׇzôEtF@Ë9KV©ÇEÙK¬)„GŽ4WېWv3ýn§ÁçÂxârjŠzš= €phˆx˜d„t”lŒ|\=}-M¥ìÉÜ\¾Ù%Á?vqš³¾Ãð6†æø Ç]\C"…3ú¹ï5ÞÞçpXç)z²^Rû÷üoõ‚{µ(âw]WT½Ïm§Cö›4&t]Ât[bìÓ®\%óêëÌÔfìW´@¨ÁÚ_ª÷n xV½é9]Mà˝àUß Í/»äµÝ<½äÙÝåáýõaY¿DÅìZÀìØüÛ£üÞÿÍ$Z-×8Ò\ Üb½RLhuñ®äâøþsBV_»ë»Um3
279
+ ½ÇaztŸÅò¬¼Åâ`});var M={a:s};this.setModule=L=>{e.setModule(w0,L)},this.getModule=()=>e.getModule(w0),this.instantiate=()=>(this.getModule().then(L=>WebAssembly.instantiate(L,M)).then(L=>{const ee=L.exports;V(ee),h=ee.k,S(),c(ee),n()}),this.ready=new Promise(L=>{n=L}).then(()=>{this.HEAP=h.buffer,this.malloc=_,this.free=R,this.mpeg_decoder_feed=O,this.mpeg_decoder_read=g,this.mpeg_frame_decoder_create=f,this.mpeg_frame_decoder_destroy=N}),this)}function K0(e={}){return this._init=()=>new this._WASMAudioDecoderCommon().instantiate(this._EmscriptenWASM,this._module).then(t=>{this._common=t,this._sampleRate=0,this._inputBytes=0,this._outputSamples=0,this._frameNumber=0,this._input=this._common.allocateTypedArray(this._inputSize,Uint8Array),this._output=this._common.allocateTypedArray(this._outputSize,Float32Array);const i=this._common.allocateTypedArray(1,Uint32Array);this._samplesDecodedPtr=this._common.allocateTypedArray(1,Uint32Array),this._sampleRatePtr=this._common.allocateTypedArray(1,Uint32Array),this._errorStringPtr=this._common.allocateTypedArray(1,Uint32Array);const n=this._common.wasm.mpeg_frame_decoder_create(i.ptr,e.enableGapless===!1?0:1);if(n)throw Error(this._getErrorMessage(n));this._decoder=i.buf[0]}),Object.defineProperty(this,"ready",{enumerable:!0,get:()=>this._ready}),this._getErrorMessage=t=>t+" "+this._common.codeToString(this._errorStringPtr.buf[0]),this.reset=()=>(this.free(),this._init()),this.free=()=>{this._common.wasm.mpeg_frame_decoder_destroy(this._decoder),this._common.wasm.free(this._decoder),this._common.free()},this.decode=t=>{let i=[],n=[],d=0;if(!(t instanceof Uint8Array))throw Error("Data to decode must be Uint8Array. Instead got "+typeof t);e:for(let o=0,u=0;o<t.length;o+=u){const h=t.subarray(o,this._input.len+o);u=h.length,this._inputBytes+=u,this._input.buf.set(h);let S=this._common.wasm.mpeg_decoder_feed(this._decoder,this._input.ptr,u);if(S===-10)continue e;t:for(;;){this._samplesDecodedPtr.buf[0]=0,S=this._common.wasm.mpeg_decoder_read(this._decoder,this._output.ptr,this._output.len,this._samplesDecodedPtr.ptr,this._sampleRatePtr.ptr,this._errorStringPtr.ptr);const W=this._samplesDecodedPtr.buf[0];if(this._outputSamples+=W,W&&(d+=W,i.push([this._output.buf.slice(0,W),this._output.buf.slice(W,W*2)])),S==-11)continue t;if(S===-10)continue e;if(S){const I=this._getErrorMessage(S);console.error("mpg123-decoder: "+I),this._common.addError(n,I,0,this._frameNumber,this._inputBytes,this._outputSamples)}}}return this._WASMAudioDecoderCommon.getDecodedAudioMultiChannel(n,i,2,d,this._sampleRatePtr.buf[0])},this.decodeFrame=t=>{const i=this.decode(t);return this._frameNumber++,i},this.decodeFrames=t=>{let i=[],n=[],d=0,o=0;for(;o<t.length;){const u=this.decodeFrame(t[o++]);i.push(u.channelData),n=n.concat(u.errors),d+=u.samplesDecoded}return this._WASMAudioDecoderCommon.getDecodedAudioMultiChannel(n,i,2,d,this._sampleRatePtr.buf[0])},this._isWebWorker=K0.isWebWorker,this._WASMAudioDecoderCommon=K0.WASMAudioDecoderCommon||qe,this._EmscriptenWASM=K0.EmscriptenWASM||w0,this._module=K0.module,this._inputSize=2**16,this._outputSize=2889*16*2,this._ready=this._init(),this}class mn extends oa{constructor(t){super(t,"mpg123-decoder",K0,w0)}async decode(t){return this.postToDecoder("decode",t)}async decodeFrame(t){return this.postToDecoder("decodeFrame",t)}async decodeFrames(t){return this.postToDecoder("decodeFrames",t)}}dn(K0,"MPEGDecoder");dn(mn,"MPEGDecoderWebWorker");globalThis.MPEGMode=Pn;globalThis.Lame=sa;globalThis.BitStream=jr;class ca{constructor(t){this.config=t,this.mp3encoder=new Fn.Mp3Encoder(t.channels,t.sampleRate,t.bitRate),this.encodedData=[]}convertAudioDataToInt16(t){const i=t.numberOfChannels,n=t.numberOfFrames,d=zs(t),o=new Int16Array(n*i);for(let u=0;u<n;u++)for(let h=0;h<i;h++){const S=Math.max(-1,Math.min(1,d[h][u]));o[u*i+h]=S*32767}return o}processBatch(t){const i=this.convertAudioDataToInt16(t);let n;if(this.config.channels===2){const d=new Int16Array(i.length/2),o=new Int16Array(i.length/2);for(let u=0;u<i.length/2;u++)d[u]=i[u*2],o[u]=i[u*2+1];n=this.mp3encoder.encodeBuffer(d,o)}else n=this.mp3encoder.encodeBuffer(i);return n}finish(){const t=this.mp3encoder.flush();t.length>0&&this.encodedData.push(t);const i=this.encodedData.reduce((o,u)=>o+u.length,0),n=new Uint8Array(i);let d=0;for(const o of this.encodedData)n.set(o,d),d+=o.length;return this.encodedData=[],new Blob([n],{type:"audio/mp3"})}getEncodedSize(){return this.encodedData.reduce((t,i)=>t+i.length,0)}}class da{constructor(){this.isReady=!1}async initialize(){if(!this.isReady)try{this.decoder=new mn,await this.decoder.ready,this.isReady=!0}catch(t){throw console.error("Failed to initialize MP3 decoder:",t),t}}async toSamples(t){this.isReady||await this.initialize();try{const i=await this.decoder.decode(new Uint8Array(t)),{channelData:n,sampleRate:d}=i,o=n.length;return{channels:n.map(h=>{const S=new Float32Array(h.length);for(let W=0;W<h.length;W++)S[W]=h[W];return S}),sampleRate:d,numberOfChannels:o}}catch(i){throw console.error("Failed to decode MP3:",i),i}}async toAudioData(t){const{channels:i,sampleRate:n,numberOfChannels:d}=await this.toSamples(t),o=1024,u=i[0].length,h=[];console.log("Samples",u);for(let S=0;S<u;S+=o){const W=u-S,I=Math.min(o,W),Z=i.map(J=>J.slice(S,S+I)),j=new Float32Array(I*d);for(let J=0;J<I;J++)for(let P=0;P<d;P++)j[J*d+P]=Z[P][J];const w=S/n*1e6,A=new AudioData({format:"f32",sampleRate:n,numberOfFrames:I,numberOfChannels:d,timestamp:Math.round(w),data:j});h.push(A)}return h}async destroy(){this.decoder&&(await this.decoder.free(),this.decoder=null,this.isReady=!1)}}const ma=100,ua=.5,ha=.1;function ba(e,t){const i=e.getTrackById(t.id);for(const n of i.mdia.minf.stbl.stsd.entries){const d=n.avcC||n.hvcC||n.vpcC||n.av1C;if(d){const o=new zi.DataStream(void 0,0,zi.DataStream.BIG_ENDIAN);return d.write(o),new Uint8Array(o.buffer,8)}}throw new Error("Codec description box (avcC, hvcC, vpcC, or av1C) not found")}function pa(e,t){var n,d;const i={duration:t.duration/t.timescale};if(t.videoTracks.length>0){const o=t.videoTracks[0],u=o.samples_duration/o.timescale;i.video={codec:o.codec,codedHeight:o.video.height,codedWidth:o.video.width,description:ba(e,o),frameRate:o.nb_samples/u}}if(t.audioTracks.length>0){const o=t.audioTracks[0],u=((n=o.audio)==null?void 0:n.sample_rate)??o.timescale,h=((d=o.audio)==null?void 0:d.channel_count)??2;i.audio={codec:o.codec,sampleRate:u,numberOfChannels:h}}return i}function ya(e,t){return new Promise((i,n)=>{const d=e.stream().getReader();let o=0;const u=zi.createFile(!1);let h=!1;u.onReady=W=>{h=!0;const I=pa(u,W);i({info:W,trackData:I,mp4:u})},u.onError=W=>{n(new Error(`MP4Box parsing error: ${W instanceof Error?W.message:String(W)}`))};const S=async()=>{try{const{done:W,value:I}=await d.read();if(W){if(!h)throw new Error("Invalid MP4 file: metadata not available");u.flush();return}if(h){d.releaseLock(),u.flush();return}const Z=I.buffer;if(Z.fileStart=o,o+=I.length,t&&t(o/e.size),u.appendBuffer(Z),o<e.size)return S();if(u.flush(),!h)throw new Error("Invalid MP4 file: metadata not available")}catch(W){n(W)}};S().catch(n)})}function fa(e,t,i,n,d){const{mp4:o,info:u}=t;return new Promise((h,S)=>{let W=0,I=!1,Z=0;const j=i==="audio"?EncodedAudioChunk:EncodedVideoChunk,w=[],A=i==="audio"?u.audioTracks[0]??null:u.videoTracks[0]??null;if(!A){h([]);return}Z=A.id;const J=u.duration/u.timescale-ha,P=Math.min(d||J,J);for(const K in u.tracks){const X=u.tracks[K];o.unsetExtractionOptions(X.id)}o.onSamples=(K,X,z)=>{for(const T of z){const H=T.cts/T.timescale;H<P&&w.push(new j({type:T.is_sync?"key":"delta",timestamp:Math.round(1e6*H),duration:Math.round(1e6*(T.duration/T.timescale)),data:T.data}))}if(z.length>0&&o.releaseUsedSamples(Z,z[z.length-1].number),w.length>0){const H=w[w.length-1].timestamp/1e6;(Math.abs(H-P)<ua||H>P)&&(I=!0,o.stop(),o.flush(),h(w))}},o.onError=K=>{S(new Error(`Extraction error: ${K instanceof Error?K.message:String(K)}`))},o.setExtractionOptions(Z,null,{nbSamples:ma});const k=o.seek(n,!0),v=e.slice(k.offset).stream().getReader();W=k.offset;const r=async()=>{try{const{done:K,value:X}=await v.read();if(K||I){v.releaseLock(),o.flush();return}const z=X.buffer;return z.fileStart=W,W+=X.length,o.appendBuffer(z),r()}catch(K){S(K)}};o.start(),r().catch(S)})}class Za{constructor(t){this.mp4Data=null,this.file=t}async load(t){this.mp4Data=await ya(this.file,t)}getTracks(){if(!this.mp4Data)throw new Error("MP4Demuxer: Must call load() before getTracks()");return this.mp4Data.trackData}getVideoDecoderConfig(){return this.getVideoTrack()}getAudioDecoderConfig(){return this.getAudioTrack()}getVideoTrack(){return this.getTracks().video}getAudioTrack(){return this.getTracks().audio}async extractSegment(t,i,n){if(!this.mp4Data)throw new Error("MP4Demuxer: Must call load() before extractSegment()");return fa(this.file,this.mp4Data,t,i,n)}getInfo(){if(!this.mp4Data)throw new Error("MP4Demuxer: Must call load() before getInfo()");return this.mp4Data.info}}var Xa=Object.defineProperty,_a=(e,t,i)=>t in e?Xa(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i,oi=(e,t,i)=>(_a(e,typeof t!="symbol"?t+"":t,i),i),I0=(e=>(e[e.AVMEDIA_TYPE_UNKNOWN=-1]="AVMEDIA_TYPE_UNKNOWN",e[e.AVMEDIA_TYPE_VIDEO=0]="AVMEDIA_TYPE_VIDEO",e[e.AVMEDIA_TYPE_AUDIO=1]="AVMEDIA_TYPE_AUDIO",e[e.AVMEDIA_TYPE_DATA=2]="AVMEDIA_TYPE_DATA",e[e.AVMEDIA_TYPE_SUBTITLE=3]="AVMEDIA_TYPE_SUBTITLE",e[e.AVMEDIA_TYPE_ATTACHMENT=4]="AVMEDIA_TYPE_ATTACHMENT",e[e.AVMEDIA_TYPE_NB=5]="AVMEDIA_TYPE_NB",e))(I0||{}),di=(e=>(e[e.AVSEEK_FLAG_BACKWARD=1]="AVSEEK_FLAG_BACKWARD",e[e.AVSEEK_FLAG_BYTE=2]="AVSEEK_FLAG_BYTE",e[e.AVSEEK_FLAG_ANY=4]="AVSEEK_FLAG_ANY",e[e.AVSEEK_FLAG_FRAME=8]="AVSEEK_FLAG_FRAME",e))(di||{}),rt=(e=>(e.WasmWorkerLoaded="WasmWorkerLoaded",e.WASMRuntimeInitialized="WASMRuntimeInitialized",e.LoadWASM="LoadWASM",e.GetAVPacket="GetAVPacket",e.GetAVPackets="GetAVPackets",e.GetAVStream="GetAVStream",e.GetAVStreams="GetAVStreams",e.GetMediaInfo="GetMediaInfo",e.ReadAVPacket="ReadAVPacket",e.AVPacketStream="AVPacketStream",e.ReadNextAVPacket="ReadNextAVPacket",e.StopReadAVPacket="StopReadAVPacket",e.SetAVLogLevel="SetAVLogLevel",e))(rt||{});const un="video",Ga="audio",Sa="subtitle",ws={VIDEO:un},Ci={[un]:I0.AVMEDIA_TYPE_VIDEO,[Ga]:I0.AVMEDIA_TYPE_AUDIO,[Sa]:I0.AVMEDIA_TYPE_SUBTITLE},hn="KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBBZT0oRT0+KEVbRS5BVk1FRElBX1RZUEVfVU5LTk9XTj0tMV09IkFWTUVESUFfVFlQRV9VTktOT1dOIixFW0UuQVZNRURJQV9UWVBFX1ZJREVPPTBdPSJBVk1FRElBX1RZUEVfVklERU8iLEVbRS5BVk1FRElBX1RZUEVfQVVESU89MV09IkFWTUVESUFfVFlQRV9BVURJTyIsRVtFLkFWTUVESUFfVFlQRV9EQVRBPTJdPSJBVk1FRElBX1RZUEVfREFUQSIsRVtFLkFWTUVESUFfVFlQRV9TVUJUSVRMRT0zXT0iQVZNRURJQV9UWVBFX1NVQlRJVExFIixFW0UuQVZNRURJQV9UWVBFX0FUVEFDSE1FTlQ9NF09IkFWTUVESUFfVFlQRV9BVFRBQ0hNRU5UIixFW0UuQVZNRURJQV9UWVBFX05CPTVdPSJBVk1FRElBX1RZUEVfTkIiLEUpKShBZXx8e30pLEc9KEU9PihFLldhc21Xb3JrZXJMb2FkZWQ9Ildhc21Xb3JrZXJMb2FkZWQiLEUuV0FTTVJ1bnRpbWVJbml0aWFsaXplZD0iV0FTTVJ1bnRpbWVJbml0aWFsaXplZCIsRS5Mb2FkV0FTTT0iTG9hZFdBU00iLEUuR2V0QVZQYWNrZXQ9IkdldEFWUGFja2V0IixFLkdldEFWUGFja2V0cz0iR2V0QVZQYWNrZXRzIixFLkdldEFWU3RyZWFtPSJHZXRBVlN0cmVhbSIsRS5HZXRBVlN0cmVhbXM9IkdldEFWU3RyZWFtcyIsRS5HZXRNZWRpYUluZm89IkdldE1lZGlhSW5mbyIsRS5SZWFkQVZQYWNrZXQ9IlJlYWRBVlBhY2tldCIsRS5BVlBhY2tldFN0cmVhbT0iQVZQYWNrZXRTdHJlYW0iLEUuUmVhZE5leHRBVlBhY2tldD0iUmVhZE5leHRBVlBhY2tldCIsRS5TdG9wUmVhZEFWUGFja2V0PSJTdG9wUmVhZEFWUGFja2V0IixFLlNldEFWTG9nTGV2ZWw9IlNldEFWTG9nTGV2ZWwiLEUpKShHfHx7fSk7InZpZGVvIisiIixBZS5BVk1FRElBX1RZUEVfVklERU8sImF1ZGlvIisiIixBZS5BVk1FRElBX1RZUEVfQVVESU8sInN1YnRpdGxlIisiIixBZS5BVk1FRElBX1RZUEVfU1VCVElUTEU7dmFyIGl0PSgoKT0+e3ZhciBFPXNlbGYubG9jYXRpb24uaHJlZjtyZXR1cm4gZnVuY3Rpb24oUj17fSl7dmFyIEMsZj1PYmplY3QuYXNzaWduKHt9LFIpLFUsSCxuZT1uZXcgUHJvbWlzZSgoZSxyKT0+e1U9ZSxIPXJ9KSxhZT0hMCxEZT1PYmplY3QuYXNzaWduKHt9LGYpLGhyPSIuL3RoaXMucHJvZ3JhbSIscT0iIjtmdW5jdGlvbiBtdChlKXtyZXR1cm4gZi5sb2NhdGVGaWxlP2YubG9jYXRlRmlsZShlLHEpOnErZX12YXIgWWUsbXIsR2U7cT1zZWxmLmxvY2F0aW9uLmhyZWYsRSYmKHE9RSkscS5zdGFydHNXaXRoKCJibG9iOiIpP3E9IiI6cT1xLnN1YnN0cigwLHEucmVwbGFjZSgvWz8jXS4qLywiIikubGFzdEluZGV4T2YoIi8iKSsxKSxZZT1lPT57dmFyIHI9bmV3IFhNTEh0dHBSZXF1ZXN0O3JldHVybiByLm9wZW4oIkdFVCIsZSwhMSksci5zZW5kKG51bGwpLHIucmVzcG9uc2VUZXh0fSxHZT1lPT57dmFyIHI9bmV3IFhNTEh0dHBSZXF1ZXN0O3JldHVybiByLm9wZW4oIkdFVCIsZSwhMSksci5yZXNwb25zZVR5cGU9ImFycmF5YnVmZmVyIixyLnNlbmQobnVsbCksbmV3IFVpbnQ4QXJyYXkoci5yZXNwb25zZSl9LG1yPShlLHIsdCk9Pnt2YXIgbj1uZXcgWE1MSHR0cFJlcXVlc3Q7bi5vcGVuKCJHRVQiLGUsITApLG4ucmVzcG9uc2VUeXBlPSJhcnJheWJ1ZmZlciIsbi5vbmxvYWQ9KCk9PntpZihuLnN0YXR1cz09MjAwfHxuLnN0YXR1cz09MCYmbi5yZXNwb25zZSl7cihuLnJlc3BvbnNlKTtyZXR1cm59dCgpfSxuLm9uZXJyb3I9dCxuLnNlbmQobnVsbCl9O3ZhciBxZT1mLnByaW50fHxjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpLGVlPWYucHJpbnRFcnJ8fGNvbnNvbGUuZXJyb3IuYmluZChjb25zb2xlKTtPYmplY3QuYXNzaWduKGYsRGUpLERlPW51bGwsZi5hcmd1bWVudHMmJmYuYXJndW1lbnRzLGYudGhpc1Byb2dyYW0mJihocj1mLnRoaXNQcm9ncmFtKSxmLnF1aXQmJmYucXVpdDt2YXIgX2U7Zi53YXNtQmluYXJ5JiYoX2U9Zi53YXNtQmluYXJ5KTt2YXIgJGUscHI9ITE7ZnVuY3Rpb24gX3IoZSxyKXtlfHxpZShyKX12YXIgSSx4LFksQ2UsZyxBLGdyLHlyO2Z1bmN0aW9uIHdyKCl7dmFyIGU9JGUuYnVmZmVyO2YuSEVBUDg9ST1uZXcgSW50OEFycmF5KGUpLGYuSEVBUDE2PVk9bmV3IEludDE2QXJyYXkoZSksZi5IRUFQVTg9eD1uZXcgVWludDhBcnJheShlKSxmLkhFQVBVMTY9Q2U9bmV3IFVpbnQxNkFycmF5KGUpLGYuSEVBUDMyPWc9bmV3IEludDMyQXJyYXkoZSksZi5IRUFQVTMyPUE9bmV3IFVpbnQzMkFycmF5KGUpLGYuSEVBUEYzMj1ncj1uZXcgRmxvYXQzMkFycmF5KGUpLGYuSEVBUEY2ND15cj1uZXcgRmxvYXQ2NEFycmF5KGUpfXZhciBFcj1bXSxicj1bXSxrcj1bXTtmdW5jdGlvbiBwdCgpe2lmKGYucHJlUnVuKWZvcih0eXBlb2YgZi5wcmVSdW49PSJmdW5jdGlvbiImJihmLnByZVJ1bj1bZi5wcmVSdW5dKTtmLnByZVJ1bi5sZW5ndGg7KXl0KGYucHJlUnVuLnNoaWZ0KCkpO0tlKEVyKX1mdW5jdGlvbiBfdCgpeyFmLm5vRlNJbml0JiYhby5pbml0LmluaXRpYWxpemVkJiZvLmluaXQoKSxvLmlnbm9yZVBlcm1pc3Npb25zPSExLEtlKGJyKX1mdW5jdGlvbiBndCgpe2lmKGYucG9zdFJ1bilmb3IodHlwZW9mIGYucG9zdFJ1bj09ImZ1bmN0aW9uIiYmKGYucG9zdFJ1bj1bZi5wb3N0UnVuXSk7Zi5wb3N0UnVuLmxlbmd0aDspRXQoZi5wb3N0UnVuLnNoaWZ0KCkpO0tlKGtyKX1mdW5jdGlvbiB5dChlKXtFci51bnNoaWZ0KGUpfWZ1bmN0aW9uIHd0KGUpe2JyLnVuc2hpZnQoZSl9ZnVuY3Rpb24gRXQoZSl7a3IudW5zaGlmdChlKX12YXIgb2U9MCxnZT1udWxsO2Z1bmN0aW9uIEhhKGUpe3JldHVybiBlfWZ1bmN0aW9uIFhlKGUpe3ZhciByO29lKyssKHI9Zi5tb25pdG9yUnVuRGVwZW5kZW5jaWVzKT09bnVsbHx8ci5jYWxsKGYsb2UpfWZ1bmN0aW9uIEZlKGUpe3ZhciB0O2lmKG9lLS0sKHQ9Zi5tb25pdG9yUnVuRGVwZW5kZW5jaWVzKT09bnVsbHx8dC5jYWxsKGYsb2UpLG9lPT0wJiZnZSl7dmFyIHI9Z2U7Z2U9bnVsbCxyKCl9fWZ1bmN0aW9uIGllKGUpe3ZhciB0Oyh0PWYub25BYm9ydCk9PW51bGx8fHQuY2FsbChmLGUpLGU9IkFib3J0ZWQoIitlKyIpIixlZShlKSxwcj0hMCxlKz0iLiBCdWlsZCB3aXRoIC1zQVNTRVJUSU9OUyBmb3IgbW9yZSBpbmZvLiI7dmFyIHI9bmV3IFdlYkFzc2VtYmx5LlJ1bnRpbWVFcnJvcihlKTt0aHJvdyBIKHIpLHJ9dmFyIGJ0PSJkYXRhOmFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbTtiYXNlNjQsIixQcj1lPT5lLnN0YXJ0c1dpdGgoYnQpO2Z1bmN0aW9uIGt0KCl7aWYoZi5sb2NhdGVGaWxlKXt2YXIgZT0id2ViLWRlbXV4ZXIud2FzbSI7cmV0dXJuIFByKGUpP2U6bXQoZSl9cmV0dXJuIG5ldyBVUkwoIndlYi1kZW11eGVyLndhc20iLHNlbGYubG9jYXRpb24uaHJlZikuaHJlZn12YXIgVGU7ZnVuY3Rpb24gQXIoZSl7aWYoZT09VGUmJl9lKXJldHVybiBuZXcgVWludDhBcnJheShfZSk7aWYoR2UpcmV0dXJuIEdlKGUpO3Rocm93ImJvdGggYXN5bmMgYW5kIHN5bmMgZmV0Y2hpbmcgb2YgdGhlIHdhc20gZmFpbGVkIn1mdW5jdGlvbiBQdChlKXtyZXR1cm4hX2UmJmFlJiZ0eXBlb2YgZmV0Y2g9PSJmdW5jdGlvbiI/ZmV0Y2goZSx7Y3JlZGVudGlhbHM6InNhbWUtb3JpZ2luIn0pLnRoZW4ocj0+e2lmKCFyLm9rKXRocm93YGZhaWxlZCB0byBsb2FkIHdhc20gYmluYXJ5IGZpbGUgYXQgJyR7ZX0nYDtyZXR1cm4gci5hcnJheUJ1ZmZlcigpfSkuY2F0Y2goKCk9PkFyKGUpKTpQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5BcihlKSl9ZnVuY3Rpb24gRHIoZSxyLHQpe3JldHVybiBQdChlKS50aGVuKG49PldlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKG4scikpLnRoZW4odCxuPT57ZWUoYGZhaWxlZCB0byBhc3luY2hyb25vdXNseSBwcmVwYXJlIHdhc206ICR7bn1gKSxpZShuKX0pfWZ1bmN0aW9uIEF0KGUscix0LG4pe3JldHVybiFlJiZ0eXBlb2YgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGVTdHJlYW1pbmc9PSJmdW5jdGlvbiImJiFQcihyKSYmdHlwZW9mIGZldGNoPT0iZnVuY3Rpb24iP2ZldGNoKHIse2NyZWRlbnRpYWxzOiJzYW1lLW9yaWdpbiJ9KS50aGVuKGE9Pnt2YXIgaT1XZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZyhhLHQpO3JldHVybiBpLnRoZW4obixmdW5jdGlvbihzKXtyZXR1cm4gZWUoYHdhc20gc3RyZWFtaW5nIGNvbXBpbGUgZmFpbGVkOiAke3N9YCksZWUoImZhbGxpbmcgYmFjayB0byBBcnJheUJ1ZmZlciBpbnN0YW50aWF0aW9uIiksRHIocix0LG4pfSl9KTpEcihyLHQsbil9ZnVuY3Rpb24gRHQoKXtyZXR1cm57YTpDYX19ZnVuY3Rpb24gJHQoKXt2YXIgZT1EdCgpO2Z1bmN0aW9uIHIobixhKXtyZXR1cm4gej1uLmV4cG9ydHMsJGU9ei5iYSx3cigpLGpyPXouZWEsd3Qoei5jYSksRmUoKSx6fVhlKCk7ZnVuY3Rpb24gdChuKXtyKG4uaW5zdGFuY2UpfWlmKGYuaW5zdGFudGlhdGVXYXNtKXRyeXtyZXR1cm4gZi5pbnN0YW50aWF0ZVdhc20oZSxyKX1jYXRjaChuKXtlZShgTW9kdWxlLmluc3RhbnRpYXRlV2FzbSBjYWxsYmFjayBmYWlsZWQgd2l0aCBlcnJvcjogJHtufWApLEgobil9cmV0dXJuIFRlfHwoVGU9a3QoKSksQXQoX2UsVGUsZSx0KS5jYXRjaChIKSx7fX12YXIgeSwkLEtlPWU9Pntmb3IoO2UubGVuZ3RoPjA7KWUuc2hpZnQoKShmKX07Zi5ub0V4aXRSdW50aW1lO3ZhciAkcj10eXBlb2YgVGV4dERlY29kZXI8InUiP25ldyBUZXh0RGVjb2RlcigidXRmOCIpOnZvaWQgMCxjZT0oZSxyLHQpPT57Zm9yKHZhciBuPXIrdCxhPXI7ZVthXSYmIShhPj1uKTspKythO2lmKGEtcj4xNiYmZS5idWZmZXImJiRyKXJldHVybiAkci5kZWNvZGUoZS5zdWJhcnJheShyLGEpKTtmb3IodmFyIGk9IiI7cjxhOyl7dmFyIHM9ZVtyKytdO2lmKCEocyYxMjgpKXtpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHMpO2NvbnRpbnVlfXZhciBsPWVbcisrXSY2MztpZigocyYyMjQpPT0xOTIpe2krPVN0cmluZy5mcm9tQ2hhckNvZGUoKHMmMzEpPDw2fGwpO2NvbnRpbnVlfXZhciB1PWVbcisrXSY2MztpZigocyYyNDApPT0yMjQ/cz0ocyYxNSk8PDEyfGw8PDZ8dTpzPShzJjcpPDwxOHxsPDwxMnx1PDw2fGVbcisrXSY2MyxzPDY1NTM2KWkrPVN0cmluZy5mcm9tQ2hhckNvZGUocyk7ZWxzZXt2YXIgYz1zLTY1NTM2O2krPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTZ8Yz4+MTAsNTYzMjB8YyYxMDIzKX19cmV0dXJuIGl9LHNlPShlLHIpPT5lP2NlKHgsZSxyKToiIixDdD0oZSxyLHQsbik9PntpZShgQXNzZXJ0aW9uIGZhaWxlZDogJHtzZShlKX0sIGF0OiBgK1tyP3NlKHIpOiJ1bmtub3duIGZpbGVuYW1lIix0LG4/c2Uobik6InVua25vd24gZnVuY3Rpb24iXSl9O2NsYXNzIEZ0e2NvbnN0cnVjdG9yKHIpe3RoaXMuZXhjUHRyPXIsdGhpcy5wdHI9ci0yNH1zZXRfdHlwZShyKXtBW3RoaXMucHRyKzQ+PjJdPXJ9Z2V0X3R5cGUoKXtyZXR1cm4gQVt0aGlzLnB0cis0Pj4yXX1zZXRfZGVzdHJ1Y3RvcihyKXtBW3RoaXMucHRyKzg+PjJdPXJ9Z2V0X2Rlc3RydWN0b3IoKXtyZXR1cm4gQVt0aGlzLnB0cis4Pj4yXX1zZXRfY2F1Z2h0KHIpe3I9cj8xOjAsSVt0aGlzLnB0cisxMl09cn1nZXRfY2F1Z2h0KCl7cmV0dXJuIElbdGhpcy5wdHIrMTJdIT0wfXNldF9yZXRocm93bihyKXtyPXI/MTowLElbdGhpcy5wdHIrMTNdPXJ9Z2V0X3JldGhyb3duKCl7cmV0dXJuIElbdGhpcy5wdHIrMTNdIT0wfWluaXQocix0KXt0aGlzLnNldF9hZGp1c3RlZF9wdHIoMCksdGhpcy5zZXRfdHlwZShyKSx0aGlzLnNldF9kZXN0cnVjdG9yKHQpfXNldF9hZGp1c3RlZF9wdHIocil7QVt0aGlzLnB0cisxNj4+Ml09cn1nZXRfYWRqdXN0ZWRfcHRyKCl7cmV0dXJuIEFbdGhpcy5wdHIrMTY+PjJdfWdldF9leGNlcHRpb25fcHRyKCl7dmFyIHI9cnQodGhpcy5nZXRfdHlwZSgpKTtpZihyKXJldHVybiBBW3RoaXMuZXhjUHRyPj4yXTt2YXIgdD10aGlzLmdldF9hZGp1c3RlZF9wdHIoKTtyZXR1cm4gdCE9PTA/dDp0aGlzLmV4Y1B0cn19dmFyIENyPTAsVHQ9KGUscix0KT0+e3ZhciBuPW5ldyBGdChlKTt0aHJvdyBuLmluaXQocix0KSxDcj1lLENyfSxTPXtpc0FiczplPT5lLmNoYXJBdCgwKT09PSIvIixzcGxpdFBhdGg6ZT0+e3ZhciByPS9eKFwvP3wpKFtcc1xTXSo/KSgoPzpcLnsxLDJ9fFteXC9dKz98KShcLlteLlwvXSp8KSkoPzpbXC9dKikkLztyZXR1cm4gci5leGVjKGUpLnNsaWNlKDEpfSxub3JtYWxpemVBcnJheTooZSxyKT0+e2Zvcih2YXIgdD0wLG49ZS5sZW5ndGgtMTtuPj0wO24tLSl7dmFyIGE9ZVtuXTthPT09Ii4iP2Uuc3BsaWNlKG4sMSk6YT09PSIuLiI/KGUuc3BsaWNlKG4sMSksdCsrKTp0JiYoZS5zcGxpY2UobiwxKSx0LS0pfWlmKHIpZm9yKDt0O3QtLSllLnVuc2hpZnQoIi4uIik7cmV0dXJuIGV9LG5vcm1hbGl6ZTplPT57dmFyIHI9Uy5pc0FicyhlKSx0PWUuc3Vic3RyKC0xKT09PSIvIjtyZXR1cm4gZT1TLm5vcm1hbGl6ZUFycmF5KGUuc3BsaXQoIi8iKS5maWx0ZXIobj0+ISFuKSwhcikuam9pbigiLyIpLCFlJiYhciYmKGU9Ii4iKSxlJiZ0JiYoZSs9Ii8iKSwocj8iLyI6IiIpK2V9LGRpcm5hbWU6ZT0+e3ZhciByPVMuc3BsaXRQYXRoKGUpLHQ9clswXSxuPXJbMV07cmV0dXJuIXQmJiFuPyIuIjoobiYmKG49bi5zdWJzdHIoMCxuLmxlbmd0aC0xKSksdCtuKX0sYmFzZW5hbWU6ZT0+e2lmKGU9PT0iLyIpcmV0dXJuIi8iO2U9Uy5ub3JtYWxpemUoZSksZT1lLnJlcGxhY2UoL1wvJC8sIiIpO3ZhciByPWUubGFzdEluZGV4T2YoIi8iKTtyZXR1cm4gcj09PS0xP2U6ZS5zdWJzdHIocisxKX0sam9pbjooLi4uZSk9PlMubm9ybWFsaXplKGUuam9pbigiLyIpKSxqb2luMjooZSxyKT0+Uy5ub3JtYWxpemUoZSsiLyIrcil9LFN0PSgpPT57aWYodHlwZW9mIGNyeXB0bz09Im9iamVjdCImJnR5cGVvZiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzPT0iZnVuY3Rpb24iKXJldHVybiBlPT5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGUpO2llKCJpbml0UmFuZG9tRGV2aWNlIil9LEZyPWU9PihGcj1TdCgpKShlKSxYPXtyZXNvbHZlOiguLi5lKT0+e2Zvcih2YXIgcj0iIix0PSExLG49ZS5sZW5ndGgtMTtuPj0tMSYmIXQ7bi0tKXt2YXIgYT1uPj0wP2Vbbl06by5jd2QoKTtpZih0eXBlb2YgYSE9InN0cmluZyIpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnRzIHRvIHBhdGgucmVzb2x2ZSBtdXN0IGJlIHN0cmluZ3MiKTtpZighYSlyZXR1cm4iIjtyPWErIi8iK3IsdD1TLmlzQWJzKGEpfXJldHVybiByPVMubm9ybWFsaXplQXJyYXkoci5zcGxpdCgiLyIpLmZpbHRlcihpPT4hIWkpLCF0KS5qb2luKCIvIiksKHQ/Ii8iOiIiKStyfHwiLiJ9LHJlbGF0aXZlOihlLHIpPT57ZT1YLnJlc29sdmUoZSkuc3Vic3RyKDEpLHI9WC5yZXNvbHZlKHIpLnN1YnN0cigxKTtmdW5jdGlvbiB0KGMpe2Zvcih2YXIgZD0wO2Q8Yy5sZW5ndGgmJmNbZF09PT0iIjtkKyspO2Zvcih2YXIgbT1jLmxlbmd0aC0xO20+PTAmJmNbbV09PT0iIjttLS0pO3JldHVybiBkPm0/W106Yy5zbGljZShkLG0tZCsxKX1mb3IodmFyIG49dChlLnNwbGl0KCIvIikpLGE9dChyLnNwbGl0KCIvIikpLGk9TWF0aC5taW4obi5sZW5ndGgsYS5sZW5ndGgpLHM9aSxsPTA7bDxpO2wrKylpZihuW2xdIT09YVtsXSl7cz1sO2JyZWFrfWZvcih2YXIgdT1bXSxsPXM7bDxuLmxlbmd0aDtsKyspdS5wdXNoKCIuLiIpO3JldHVybiB1PXUuY29uY2F0KGEuc2xpY2UocykpLHUuam9pbigiLyIpfX0sSmU9W10sWmU9ZT0+e2Zvcih2YXIgcj0wLHQ9MDt0PGUubGVuZ3RoOysrdCl7dmFyIG49ZS5jaGFyQ29kZUF0KHQpO248PTEyNz9yKys6bjw9MjA0Nz9yKz0yOm4+PTU1Mjk2JiZuPD01NzM0Mz8ocis9NCwrK3QpOnIrPTN9cmV0dXJuIHJ9LFFlPShlLHIsdCxuKT0+e2lmKCEobj4wKSlyZXR1cm4gMDtmb3IodmFyIGE9dCxpPXQrbi0xLHM9MDtzPGUubGVuZ3RoOysrcyl7dmFyIGw9ZS5jaGFyQ29kZUF0KHMpO2lmKGw+PTU1Mjk2JiZsPD01NzM0Myl7dmFyIHU9ZS5jaGFyQ29kZUF0KCsrcyk7bD02NTUzNisoKGwmMTAyMyk8PDEwKXx1JjEwMjN9aWYobDw9MTI3KXtpZih0Pj1pKWJyZWFrO3JbdCsrXT1sfWVsc2UgaWYobDw9MjA0Nyl7aWYodCsxPj1pKWJyZWFrO3JbdCsrXT0xOTJ8bD4+NixyW3QrK109MTI4fGwmNjN9ZWxzZSBpZihsPD02NTUzNSl7aWYodCsyPj1pKWJyZWFrO3JbdCsrXT0yMjR8bD4+MTIsclt0KytdPTEyOHxsPj42JjYzLHJbdCsrXT0xMjh8bCY2M31lbHNle2lmKHQrMz49aSlicmVhaztyW3QrK109MjQwfGw+PjE4LHJbdCsrXT0xMjh8bD4+MTImNjMsclt0KytdPTEyOHxsPj42JjYzLHJbdCsrXT0xMjh8bCY2M319cmV0dXJuIHJbdF09MCx0LWF9O2Z1bmN0aW9uIFNlKGUscix0KXt2YXIgbj1aZShlKSsxLGE9bmV3IEFycmF5KG4pLGk9UWUoZSxhLDAsYS5sZW5ndGgpO3JldHVybiByJiYoYS5sZW5ndGg9aSksYX12YXIgTXQ9KCk9PntpZighSmUubGVuZ3RoKXt2YXIgZT1udWxsO2lmKCFlKXJldHVybiBudWxsO0plPVNlKGUsITApfXJldHVybiBKZS5zaGlmdCgpfSxsZT17dHR5czpbXSxpbml0KCl7fSxzaHV0ZG93bigpe30scmVnaXN0ZXIoZSxyKXtsZS50dHlzW2VdPXtpbnB1dDpbXSxvdXRwdXQ6W10sb3BzOnJ9LG8ucmVnaXN0ZXJEZXZpY2UoZSxsZS5zdHJlYW1fb3BzKX0sc3RyZWFtX29wczp7b3BlbihlKXt2YXIgcj1sZS50dHlzW2Uubm9kZS5yZGV2XTtpZighcil0aHJvdyBuZXcgby5FcnJub0Vycm9yKDQzKTtlLnR0eT1yLGUuc2Vla2FibGU9ITF9LGNsb3NlKGUpe2UudHR5Lm9wcy5mc3luYyhlLnR0eSl9LGZzeW5jKGUpe2UudHR5Lm9wcy5mc3luYyhlLnR0eSl9LHJlYWQoZSxyLHQsbixhKXtpZighZS50dHl8fCFlLnR0eS5vcHMuZ2V0X2NoYXIpdGhyb3cgbmV3IG8uRXJybm9FcnJvcig2MCk7Zm9yKHZhciBpPTAscz0wO3M8bjtzKyspe3ZhciBsO3RyeXtsPWUudHR5Lm9wcy5nZXRfY2hhcihlLnR0eSl9Y2F0Y2h7dGhyb3cgbmV3IG8uRXJybm9FcnJvcigyOSl9aWYobD09PXZvaWQgMCYmaT09PTApdGhyb3cgbmV3IG8uRXJybm9FcnJvcig2KTtpZihsPT1udWxsKWJyZWFrO2krKyxyW3Qrc109bH1yZXR1cm4gaSYmKGUubm9kZS50aW1lc3RhbXA9RGF0ZS5ub3coKSksaX0sd3JpdGUoZSxyLHQsbixhKXtpZighZS50dHl8fCFlLnR0eS5vcHMucHV0X2NoYXIpdGhyb3cgbmV3IG8uRXJybm9FcnJvcig2MCk7dHJ5e2Zvcih2YXIgaT0wO2k8bjtpKyspZS50dHkub3BzLnB1dF9jaGFyKGUudHR5LHJbdCtpXSl9Y2F0Y2h7dGhyb3cgbmV3IG8uRXJybm9FcnJvcigyOSl9cmV0dXJuIG4mJihlLm5vZGUudGltZXN0YW1wPURhdGUubm93KCkpLGl9fSxkZWZhdWx0X3R0eV9vcHM6e2dldF9jaGFyKGUpe3JldHVybiBNdCgpfSxwdXRfY2hhcihlLHIpe3I9PT1udWxsfHxyPT09MTA/KHFlKGNlKGUub3V0cHV0LDApKSxlLm91dHB1dD1bXSk6ciE9MCYmZS5vdXRwdXQucHVzaChyKX0sZnN5bmMoZSl7ZS5vdXRwdXQmJmUub3V0cHV0Lmxlbmd0aD4wJiYocWUoY2UoZS5vdXRwdXQsMCkpLGUub3V0cHV0PVtdKX0saW9jdGxfdGNnZXRzKGUpe3JldHVybntjX2lmbGFnOjI1ODU2LGNfb2ZsYWc6NSxjX2NmbGFnOjE5MSxjX2xmbGFnOjM1Mzg3LGNfY2M6WzMsMjgsMTI3LDIxLDQsMCwxLDAsMTcsMTksMjYsMCwxOCwxNSwyMywyMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwXX19LGlvY3RsX3Rjc2V0cyhlLHIsdCl7cmV0dXJuIDB9LGlvY3RsX3Rpb2Nnd2luc3ooZSl7cmV0dXJuWzI0LDgwXX19LGRlZmF1bHRfdHR5MV9vcHM6e3B1dF9jaGFyKGUscil7cj09PW51bGx8fHI9PT0xMD8oZWUoY2UoZS5vdXRwdXQsMCkpLGUub3V0cHV0PVtdKTpyIT0wJiZlLm91dHB1dC5wdXNoKHIpfSxmc3luYyhlKXtlLm91dHB1dCYmZS5vdXRwdXQubGVuZ3RoPjAmJihlZShjZShlLm91dHB1dCwwKSksZS5vdXRwdXQ9W10pfX19LFRyPWU9PntpZSgpfSxiPXtvcHNfdGFibGU6bnVsbCxtb3VudChlKXtyZXR1cm4gYi5jcmVhdGVOb2RlKG51bGwsIi8iLDE2ODk1LDApfSxjcmVhdGVOb2RlKGUscix0LG4pe2lmKG8uaXNCbGtkZXYodCl8fG8uaXNGSUZPKHQpKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNjMpO2Iub3BzX3RhYmxlfHwoYi5vcHNfdGFibGU9e2Rpcjp7bm9kZTp7Z2V0YXR0cjpiLm5vZGVfb3BzLmdldGF0dHIsc2V0YXR0cjpiLm5vZGVfb3BzLnNldGF0dHIsbG9va3VwOmIubm9kZV9vcHMubG9va3VwLG1rbm9kOmIubm9kZV9vcHMubWtub2QscmVuYW1lOmIubm9kZV9vcHMucmVuYW1lLHVubGluazpiLm5vZGVfb3BzLnVubGluayxybWRpcjpiLm5vZGVfb3BzLnJtZGlyLHJlYWRkaXI6Yi5ub2RlX29wcy5yZWFkZGlyLHN5bWxpbms6Yi5ub2RlX29wcy5zeW1saW5rfSxzdHJlYW06e2xsc2VlazpiLnN0cmVhbV9vcHMubGxzZWVrfX0sZmlsZTp7bm9kZTp7Z2V0YXR0cjpiLm5vZGVfb3BzLmdldGF0dHIsc2V0YXR0cjpiLm5vZGVfb3BzLnNldGF0dHJ9LHN0cmVhbTp7bGxzZWVrOmIuc3RyZWFtX29wcy5sbHNlZWsscmVhZDpiLnN0cmVhbV9vcHMucmVhZCx3cml0ZTpiLnN0cmVhbV9vcHMud3JpdGUsYWxsb2NhdGU6Yi5zdHJlYW1fb3BzLmFsbG9jYXRlLG1tYXA6Yi5zdHJlYW1fb3BzLm1tYXAsbXN5bmM6Yi5zdHJlYW1fb3BzLm1zeW5jfX0sbGluazp7bm9kZTp7Z2V0YXR0cjpiLm5vZGVfb3BzLmdldGF0dHIsc2V0YXR0cjpiLm5vZGVfb3BzLnNldGF0dHIscmVhZGxpbms6Yi5ub2RlX29wcy5yZWFkbGlua30sc3RyZWFtOnt9fSxjaHJkZXY6e25vZGU6e2dldGF0dHI6Yi5ub2RlX29wcy5nZXRhdHRyLHNldGF0dHI6Yi5ub2RlX29wcy5zZXRhdHRyfSxzdHJlYW06by5jaHJkZXZfc3RyZWFtX29wc319KTt2YXIgYT1vLmNyZWF0ZU5vZGUoZSxyLHQsbik7cmV0dXJuIG8uaXNEaXIoYS5tb2RlKT8oYS5ub2RlX29wcz1iLm9wc190YWJsZS5kaXIubm9kZSxhLnN0cmVhbV9vcHM9Yi5vcHNfdGFibGUuZGlyLnN0cmVhbSxhLmNvbnRlbnRzPXt9KTpvLmlzRmlsZShhLm1vZGUpPyhhLm5vZGVfb3BzPWIub3BzX3RhYmxlLmZpbGUubm9kZSxhLnN0cmVhbV9vcHM9Yi5vcHNfdGFibGUuZmlsZS5zdHJlYW0sYS51c2VkQnl0ZXM9MCxhLmNvbnRlbnRzPW51bGwpOm8uaXNMaW5rKGEubW9kZSk/KGEubm9kZV9vcHM9Yi5vcHNfdGFibGUubGluay5ub2RlLGEuc3RyZWFtX29wcz1iLm9wc190YWJsZS5saW5rLnN0cmVhbSk6by5pc0NocmRldihhLm1vZGUpJiYoYS5ub2RlX29wcz1iLm9wc190YWJsZS5jaHJkZXYubm9kZSxhLnN0cmVhbV9vcHM9Yi5vcHNfdGFibGUuY2hyZGV2LnN0cmVhbSksYS50aW1lc3RhbXA9RGF0ZS5ub3coKSxlJiYoZS5jb250ZW50c1tyXT1hLGUudGltZXN0YW1wPWEudGltZXN0YW1wKSxhfSxnZXRGaWxlRGF0YUFzVHlwZWRBcnJheShlKXtyZXR1cm4gZS5jb250ZW50cz9lLmNvbnRlbnRzLnN1YmFycmF5P2UuY29udGVudHMuc3ViYXJyYXkoMCxlLnVzZWRCeXRlcyk6bmV3IFVpbnQ4QXJyYXkoZS5jb250ZW50cyk6bmV3IFVpbnQ4QXJyYXkoMCl9LGV4cGFuZEZpbGVTdG9yYWdlKGUscil7dmFyIHQ9ZS5jb250ZW50cz9lLmNvbnRlbnRzLmxlbmd0aDowO2lmKCEodD49cikpe3ZhciBuPTEwMjQqMTAyNDtyPU1hdGgubWF4KHIsdCoodDxuPzI6MS4xMjUpPj4+MCksdCE9MCYmKHI9TWF0aC5tYXgociwyNTYpKTt2YXIgYT1lLmNvbnRlbnRzO2UuY29udGVudHM9bmV3IFVpbnQ4QXJyYXkociksZS51c2VkQnl0ZXM+MCYmZS5jb250ZW50cy5zZXQoYS5zdWJhcnJheSgwLGUudXNlZEJ5dGVzKSwwKX19LHJlc2l6ZUZpbGVTdG9yYWdlKGUscil7aWYoZS51c2VkQnl0ZXMhPXIpaWYocj09MCllLmNvbnRlbnRzPW51bGwsZS51c2VkQnl0ZXM9MDtlbHNle3ZhciB0PWUuY29udGVudHM7ZS5jb250ZW50cz1uZXcgVWludDhBcnJheShyKSx0JiZlLmNvbnRlbnRzLnNldCh0LnN1YmFycmF5KDAsTWF0aC5taW4ocixlLnVzZWRCeXRlcykpKSxlLnVzZWRCeXRlcz1yfX0sbm9kZV9vcHM6e2dldGF0dHIoZSl7dmFyIHI9e307cmV0dXJuIHIuZGV2PW8uaXNDaHJkZXYoZS5tb2RlKT9lLmlkOjEsci5pbm89ZS5pZCxyLm1vZGU9ZS5tb2RlLHIubmxpbms9MSxyLnVpZD0wLHIuZ2lkPTAsci5yZGV2PWUucmRldixvLmlzRGlyKGUubW9kZSk/ci5zaXplPTQwOTY6by5pc0ZpbGUoZS5tb2RlKT9yLnNpemU9ZS51c2VkQnl0ZXM6by5pc0xpbmsoZS5tb2RlKT9yLnNpemU9ZS5saW5rLmxlbmd0aDpyLnNpemU9MCxyLmF0aW1lPW5ldyBEYXRlKGUudGltZXN0YW1wKSxyLm10aW1lPW5ldyBEYXRlKGUudGltZXN0YW1wKSxyLmN0aW1lPW5ldyBEYXRlKGUudGltZXN0YW1wKSxyLmJsa3NpemU9NDA5NixyLmJsb2Nrcz1NYXRoLmNlaWwoci5zaXplL3IuYmxrc2l6ZSkscn0sc2V0YXR0cihlLHIpe3IubW9kZSE9PXZvaWQgMCYmKGUubW9kZT1yLm1vZGUpLHIudGltZXN0YW1wIT09dm9pZCAwJiYoZS50aW1lc3RhbXA9ci50aW1lc3RhbXApLHIuc2l6ZSE9PXZvaWQgMCYmYi5yZXNpemVGaWxlU3RvcmFnZShlLHIuc2l6ZSl9LGxvb2t1cChlLHIpe3Rocm93IG8uZ2VuZXJpY0Vycm9yc1s0NF19LG1rbm9kKGUscix0LG4pe3JldHVybiBiLmNyZWF0ZU5vZGUoZSxyLHQsbil9LHJlbmFtZShlLHIsdCl7aWYoby5pc0RpcihlLm1vZGUpKXt2YXIgbjt0cnl7bj1vLmxvb2t1cE5vZGUocix0KX1jYXRjaHt9aWYobilmb3IodmFyIGEgaW4gbi5jb250ZW50cyl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDU1KX1kZWxldGUgZS5wYXJlbnQuY29udGVudHNbZS5uYW1lXSxlLnBhcmVudC50aW1lc3RhbXA9RGF0ZS5ub3coKSxlLm5hbWU9dCxyLmNvbnRlbnRzW3RdPWUsci50aW1lc3RhbXA9ZS5wYXJlbnQudGltZXN0YW1wLGUucGFyZW50PXJ9LHVubGluayhlLHIpe2RlbGV0ZSBlLmNvbnRlbnRzW3JdLGUudGltZXN0YW1wPURhdGUubm93KCl9LHJtZGlyKGUscil7dmFyIHQ9by5sb29rdXBOb2RlKGUscik7Zm9yKHZhciBuIGluIHQuY29udGVudHMpdGhyb3cgbmV3IG8uRXJybm9FcnJvcig1NSk7ZGVsZXRlIGUuY29udGVudHNbcl0sZS50aW1lc3RhbXA9RGF0ZS5ub3coKX0scmVhZGRpcihlKXt2YXIgcj1bIi4iLCIuLiJdO2Zvcih2YXIgdCBvZiBPYmplY3Qua2V5cyhlLmNvbnRlbnRzKSlyLnB1c2godCk7cmV0dXJuIHJ9LHN5bWxpbmsoZSxyLHQpe3ZhciBuPWIuY3JlYXRlTm9kZShlLHIsNDE0NzEsMCk7cmV0dXJuIG4ubGluaz10LG59LHJlYWRsaW5rKGUpe2lmKCFvLmlzTGluayhlLm1vZGUpKXRocm93IG5ldyBvLkVycm5vRXJyb3IoMjgpO3JldHVybiBlLmxpbmt9fSxzdHJlYW1fb3BzOntyZWFkKGUscix0LG4sYSl7dmFyIGk9ZS5ub2RlLmNvbnRlbnRzO2lmKGE+PWUubm9kZS51c2VkQnl0ZXMpcmV0dXJuIDA7dmFyIHM9TWF0aC5taW4oZS5ub2RlLnVzZWRCeXRlcy1hLG4pO2lmKHM+OCYmaS5zdWJhcnJheSlyLnNldChpLnN1YmFycmF5KGEsYStzKSx0KTtlbHNlIGZvcih2YXIgbD0wO2w8cztsKyspclt0K2xdPWlbYStsXTtyZXR1cm4gc30sd3JpdGUoZSxyLHQsbixhLGkpe2lmKHIuYnVmZmVyPT09SS5idWZmZXImJihpPSExKSwhbilyZXR1cm4gMDt2YXIgcz1lLm5vZGU7aWYocy50aW1lc3RhbXA9RGF0ZS5ub3coKSxyLnN1YmFycmF5JiYoIXMuY29udGVudHN8fHMuY29udGVudHMuc3ViYXJyYXkpKXtpZihpKXJldHVybiBzLmNvbnRlbnRzPXIuc3ViYXJyYXkodCx0K24pLHMudXNlZEJ5dGVzPW4sbjtpZihzLnVzZWRCeXRlcz09PTAmJmE9PT0wKXJldHVybiBzLmNvbnRlbnRzPXIuc2xpY2UodCx0K24pLHMudXNlZEJ5dGVzPW4sbjtpZihhK248PXMudXNlZEJ5dGVzKXJldHVybiBzLmNvbnRlbnRzLnNldChyLnN1YmFycmF5KHQsdCtuKSxhKSxufWlmKGIuZXhwYW5kRmlsZVN0b3JhZ2UocyxhK24pLHMuY29udGVudHMuc3ViYXJyYXkmJnIuc3ViYXJyYXkpcy5jb250ZW50cy5zZXQoci5zdWJhcnJheSh0LHQrbiksYSk7ZWxzZSBmb3IodmFyIGw9MDtsPG47bCsrKXMuY29udGVudHNbYStsXT1yW3QrbF07cmV0dXJuIHMudXNlZEJ5dGVzPU1hdGgubWF4KHMudXNlZEJ5dGVzLGErbiksbn0sbGxzZWVrKGUscix0KXt2YXIgbj1yO2lmKHQ9PT0xP24rPWUucG9zaXRpb246dD09PTImJm8uaXNGaWxlKGUubm9kZS5tb2RlKSYmKG4rPWUubm9kZS51c2VkQnl0ZXMpLG48MCl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDI4KTtyZXR1cm4gbn0sYWxsb2NhdGUoZSxyLHQpe2IuZXhwYW5kRmlsZVN0b3JhZ2UoZS5ub2RlLHIrdCksZS5ub2RlLnVzZWRCeXRlcz1NYXRoLm1heChlLm5vZGUudXNlZEJ5dGVzLHIrdCl9LG1tYXAoZSxyLHQsbixhKXtpZighby5pc0ZpbGUoZS5ub2RlLm1vZGUpKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNDMpO3ZhciBpLHMsbD1lLm5vZGUuY29udGVudHM7aWYoIShhJjIpJiZsLmJ1ZmZlcj09PUkuYnVmZmVyKXM9ITEsaT1sLmJ5dGVPZmZzZXQ7ZWxzZXtpZigodD4wfHx0K3I8bC5sZW5ndGgpJiYobC5zdWJhcnJheT9sPWwuc3ViYXJyYXkodCx0K3IpOmw9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwobCx0LHQrcikpLHM9ITAsaT1UcigpLCFpKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNDgpO0kuc2V0KGwsaSl9cmV0dXJue3B0cjppLGFsbG9jYXRlZDpzfX0sbXN5bmMoZSxyLHQsbixhKXtyZXR1cm4gYi5zdHJlYW1fb3BzLndyaXRlKGUsciwwLG4sdCwhMSksMH19fSxSdD0oZSxyLHQsbik9Pnt2YXIgYT1gYWwgJHtlfWA7bXIoZSxpPT57cihuZXcgVWludDhBcnJheShpKSksYSYmRmUoKX0saT0+e2lmKHQpdCgpO2Vsc2UgdGhyb3dgTG9hZGluZyBkYXRhIGZpbGUgIiR7ZX0iIGZhaWxlZC5gfSksYSYmWGUoKX0sT3Q9KGUscix0LG4sYSxpKT0+e28uY3JlYXRlRGF0YUZpbGUoZSxyLHQsbixhLGkpfSxJdD1mLnByZWxvYWRQbHVnaW5zfHxbXSxMdD0oZSxyLHQsbik9Pnt0eXBlb2YgQnJvd3NlcjwidSImJkJyb3dzZXIuaW5pdCgpO3ZhciBhPSExO3JldHVybiBJdC5mb3JFYWNoKGk9PnthfHxpLmNhbkhhbmRsZShyKSYmKGkuaGFuZGxlKGUscix0LG4pLGE9ITApfSksYX0sVnQ9KGUscix0LG4sYSxpLHMsbCx1LGMpPT57dmFyIGQ9cj9YLnJlc29sdmUoUy5qb2luMihlLHIpKTplO2Z1bmN0aW9uIG0oaCl7ZnVuY3Rpb24gcCh3KXtjPT1udWxsfHxjKCksbHx8T3QoZSxyLHcsbixhLHUpLGk9PW51bGx8fGkoKSxGZSgpfUx0KGgsZCxwLCgpPT57cz09bnVsbHx8cygpLEZlKCl9KXx8cChoKX1YZSgpLHR5cGVvZiB0PT0ic3RyaW5nIj9SdCh0LG0scyk6bSh0KX0sVXQ9ZT0+e3ZhciByPXtyOjAsInIrIjoyLHc6NTc3LCJ3KyI6NTc4LGE6MTA4OSwiYSsiOjEwOTB9LHQ9cltlXTtpZih0eXBlb2YgdD4idSIpdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGZpbGUgb3BlbiBtb2RlOiAke2V9YCk7cmV0dXJuIHR9LGVyPShlLHIpPT57dmFyIHQ9MDtyZXR1cm4gZSYmKHR8PTM2NSksciYmKHR8PTE0NiksdH0sVj17RElSX01PREU6MTY4OTUsRklMRV9NT0RFOjMzMjc5LHJlYWRlcjpudWxsLG1vdW50KGUpe19yKGFlKSxWLnJlYWRlcnx8KFYucmVhZGVyPW5ldyBGaWxlUmVhZGVyU3luYyk7dmFyIHI9Vi5jcmVhdGVOb2RlKG51bGwsIi8iLFYuRElSX01PREUsMCksdD17fTtmdW5jdGlvbiBuKGkpe2Zvcih2YXIgcz1pLnNwbGl0KCIvIiksbD1yLHU9MDt1PHMubGVuZ3RoLTE7dSsrKXt2YXIgYz1zLnNsaWNlKDAsdSsxKS5qb2luKCIvIik7dFtjXXx8KHRbY109Vi5jcmVhdGVOb2RlKGwsc1t1XSxWLkRJUl9NT0RFLDApKSxsPXRbY119cmV0dXJuIGx9ZnVuY3Rpb24gYShpKXt2YXIgcz1pLnNwbGl0KCIvIik7cmV0dXJuIHNbcy5sZW5ndGgtMV19cmV0dXJuIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoZS5vcHRzLmZpbGVzfHxbXSxmdW5jdGlvbihpKXtWLmNyZWF0ZU5vZGUobihpLm5hbWUpLGEoaS5uYW1lKSxWLkZJTEVfTU9ERSwwLGksaS5sYXN0TW9kaWZpZWREYXRlKX0pLChlLm9wdHMuYmxvYnN8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGkpe1YuY3JlYXRlTm9kZShuKGkubmFtZSksYShpLm5hbWUpLFYuRklMRV9NT0RFLDAsaS5kYXRhKX0pLChlLm9wdHMucGFja2FnZXN8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGkpe2kubWV0YWRhdGEuZmlsZXMuZm9yRWFjaChmdW5jdGlvbihzKXt2YXIgbD1zLmZpbGVuYW1lLnN1YnN0cigxKTtWLmNyZWF0ZU5vZGUobihsKSxhKGwpLFYuRklMRV9NT0RFLDAsaS5ibG9iLnNsaWNlKHMuc3RhcnQscy5lbmQpKX0pfSkscn0sY3JlYXRlTm9kZShlLHIsdCxuLGEsaSl7dmFyIHM9by5jcmVhdGVOb2RlKGUscix0KTtyZXR1cm4gcy5tb2RlPXQscy5ub2RlX29wcz1WLm5vZGVfb3BzLHMuc3RyZWFtX29wcz1WLnN0cmVhbV9vcHMscy50aW1lc3RhbXA9KGl8fG5ldyBEYXRlKS5nZXRUaW1lKCksX3IoVi5GSUxFX01PREUhPT1WLkRJUl9NT0RFKSx0PT09Vi5GSUxFX01PREU/KHMuc2l6ZT1hLnNpemUscy5jb250ZW50cz1hKToocy5zaXplPTQwOTYscy5jb250ZW50cz17fSksZSYmKGUuY29udGVudHNbcl09cyksc30sbm9kZV9vcHM6e2dldGF0dHIoZSl7cmV0dXJue2RldjoxLGlubzplLmlkLG1vZGU6ZS5tb2RlLG5saW5rOjEsdWlkOjAsZ2lkOjAscmRldjowLHNpemU6ZS5zaXplLGF0aW1lOm5ldyBEYXRlKGUudGltZXN0YW1wKSxtdGltZTpuZXcgRGF0ZShlLnRpbWVzdGFtcCksY3RpbWU6bmV3IERhdGUoZS50aW1lc3RhbXApLGJsa3NpemU6NDA5NixibG9ja3M6TWF0aC5jZWlsKGUuc2l6ZS80MDk2KX19LHNldGF0dHIoZSxyKXtyLm1vZGUhPT12b2lkIDAmJihlLm1vZGU9ci5tb2RlKSxyLnRpbWVzdGFtcCE9PXZvaWQgMCYmKGUudGltZXN0YW1wPXIudGltZXN0YW1wKX0sbG9va3VwKGUscil7dGhyb3cgbmV3IG8uRXJybm9FcnJvcig0NCl9LG1rbm9kKGUscix0LG4pe3Rocm93IG5ldyBvLkVycm5vRXJyb3IoNjMpfSxyZW5hbWUoZSxyLHQpe3Rocm93IG5ldyBvLkVycm5vRXJyb3IoNjMpfSx1bmxpbmsoZSxyKXt0aHJvdyBuZXcgby5FcnJub0Vycm9yKDYzKX0scm1kaXIoZSxyKXt0aHJvdyBuZXcgby5FcnJub0Vycm9yKDYzKX0scmVhZGRpcihlKXt2YXIgcj1bIi4iLCIuLiJdO2Zvcih2YXIgdCBvZiBPYmplY3Qua2V5cyhlLmNvbnRlbnRzKSlyLnB1c2godCk7cmV0dXJuIHJ9LHN5bWxpbmsoZSxyLHQpe3Rocm93IG5ldyBvLkVycm5vRXJyb3IoNjMpfX0sc3RyZWFtX29wczp7cmVhZChlLHIsdCxuLGEpe2lmKGE+PWUubm9kZS5zaXplKXJldHVybiAwO3ZhciBpPWUubm9kZS5jb250ZW50cy5zbGljZShhLGErbikscz1WLnJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcihpKTtyZXR1cm4gci5zZXQobmV3IFVpbnQ4QXJyYXkocyksdCksaS5zaXplfSx3cml0ZShlLHIsdCxuLGEpe3Rocm93IG5ldyBvLkVycm5vRXJyb3IoMjkpfSxsbHNlZWsoZSxyLHQpe3ZhciBuPXI7aWYodD09PTE/bis9ZS5wb3NpdGlvbjp0PT09MiYmby5pc0ZpbGUoZS5ub2RlLm1vZGUpJiYobis9ZS5ub2RlLnNpemUpLG48MCl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDI4KTtyZXR1cm4gbn19fSxvPXtyb290Om51bGwsbW91bnRzOltdLGRldmljZXM6e30sc3RyZWFtczpbXSxuZXh0SW5vZGU6MSxuYW1lVGFibGU6bnVsbCxjdXJyZW50UGF0aDoiLyIsaW5pdGlhbGl6ZWQ6ITEsaWdub3JlUGVybWlzc2lvbnM6ITAsRXJybm9FcnJvcjpjbGFzc3tjb25zdHJ1Y3RvcihlKXt0aGlzLm5hbWU9IkVycm5vRXJyb3IiLHRoaXMuZXJybm89ZX19LGdlbmVyaWNFcnJvcnM6e30sZmlsZXN5c3RlbXM6bnVsbCxzeW5jRlNSZXF1ZXN0czowLEZTU3RyZWFtOmNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5zaGFyZWQ9e319Z2V0IG9iamVjdCgpe3JldHVybiB0aGlzLm5vZGV9c2V0IG9iamVjdChlKXt0aGlzLm5vZGU9ZX1nZXQgaXNSZWFkKCl7cmV0dXJuKHRoaXMuZmxhZ3MmMjA5NzE1NSkhPT0xfWdldCBpc1dyaXRlKCl7cmV0dXJuKHRoaXMuZmxhZ3MmMjA5NzE1NSkhPT0wfWdldCBpc0FwcGVuZCgpe3JldHVybiB0aGlzLmZsYWdzJjEwMjR9Z2V0IGZsYWdzKCl7cmV0dXJuIHRoaXMuc2hhcmVkLmZsYWdzfXNldCBmbGFncyhlKXt0aGlzLnNoYXJlZC5mbGFncz1lfWdldCBwb3NpdGlvbigpe3JldHVybiB0aGlzLnNoYXJlZC5wb3NpdGlvbn1zZXQgcG9zaXRpb24oZSl7dGhpcy5zaGFyZWQucG9zaXRpb249ZX19LEZTTm9kZTpjbGFzc3tjb25zdHJ1Y3RvcihlLHIsdCxuKXtlfHwoZT10aGlzKSx0aGlzLnBhcmVudD1lLHRoaXMubW91bnQ9ZS5tb3VudCx0aGlzLm1vdW50ZWQ9bnVsbCx0aGlzLmlkPW8ubmV4dElub2RlKyssdGhpcy5uYW1lPXIsdGhpcy5tb2RlPXQsdGhpcy5ub2RlX29wcz17fSx0aGlzLnN0cmVhbV9vcHM9e30sdGhpcy5yZGV2PW4sdGhpcy5yZWFkTW9kZT0zNjUsdGhpcy53cml0ZU1vZGU9MTQ2fWdldCByZWFkKCl7cmV0dXJuKHRoaXMubW9kZSZ0aGlzLnJlYWRNb2RlKT09PXRoaXMucmVhZE1vZGV9c2V0IHJlYWQoZSl7ZT90aGlzLm1vZGV8PXRoaXMucmVhZE1vZGU6dGhpcy5tb2RlJj1+dGhpcy5yZWFkTW9kZX1nZXQgd3JpdGUoKXtyZXR1cm4odGhpcy5tb2RlJnRoaXMud3JpdGVNb2RlKT09PXRoaXMud3JpdGVNb2RlfXNldCB3cml0ZShlKXtlP3RoaXMubW9kZXw9dGhpcy53cml0ZU1vZGU6dGhpcy5tb2RlJj1+dGhpcy53cml0ZU1vZGV9Z2V0IGlzRm9sZGVyKCl7cmV0dXJuIG8uaXNEaXIodGhpcy5tb2RlKX1nZXQgaXNEZXZpY2UoKXtyZXR1cm4gby5pc0NocmRldih0aGlzLm1vZGUpfX0sbG9va3VwUGF0aChlLHI9e30pe2lmKGU9WC5yZXNvbHZlKGUpLCFlKXJldHVybntwYXRoOiIiLG5vZGU6bnVsbH07dmFyIHQ9e2ZvbGxvd19tb3VudDohMCxyZWN1cnNlX2NvdW50OjB9O2lmKHI9T2JqZWN0LmFzc2lnbih0LHIpLHIucmVjdXJzZV9jb3VudD44KXRocm93IG5ldyBvLkVycm5vRXJyb3IoMzIpO2Zvcih2YXIgbj1lLnNwbGl0KCIvIikuZmlsdGVyKG09PiEhbSksYT1vLnJvb3QsaT0iLyIscz0wO3M8bi5sZW5ndGg7cysrKXt2YXIgbD1zPT09bi5sZW5ndGgtMTtpZihsJiZyLnBhcmVudClicmVhaztpZihhPW8ubG9va3VwTm9kZShhLG5bc10pLGk9Uy5qb2luMihpLG5bc10pLG8uaXNNb3VudHBvaW50KGEpJiYoIWx8fGwmJnIuZm9sbG93X21vdW50KSYmKGE9YS5tb3VudGVkLnJvb3QpLCFsfHxyLmZvbGxvdylmb3IodmFyIHU9MDtvLmlzTGluayhhLm1vZGUpOyl7dmFyIGM9by5yZWFkbGluayhpKTtpPVgucmVzb2x2ZShTLmRpcm5hbWUoaSksYyk7dmFyIGQ9by5sb29rdXBQYXRoKGkse3JlY3Vyc2VfY291bnQ6ci5yZWN1cnNlX2NvdW50KzF9KTtpZihhPWQubm9kZSx1Kys+NDApdGhyb3cgbmV3IG8uRXJybm9FcnJvcigzMil9fXJldHVybntwYXRoOmksbm9kZTphfX0sZ2V0UGF0aChlKXtmb3IodmFyIHI7Oyl7aWYoby5pc1Jvb3QoZSkpe3ZhciB0PWUubW91bnQubW91bnRwb2ludDtyZXR1cm4gcj90W3QubGVuZ3RoLTFdIT09Ii8iP2Ake3R9LyR7cn1gOnQrcjp0fXI9cj9gJHtlLm5hbWV9LyR7cn1gOmUubmFtZSxlPWUucGFyZW50fX0saGFzaE5hbWUoZSxyKXtmb3IodmFyIHQ9MCxuPTA7bjxyLmxlbmd0aDtuKyspdD0odDw8NSktdCtyLmNoYXJDb2RlQXQobil8MDtyZXR1cm4oZSt0Pj4+MCklby5uYW1lVGFibGUubGVuZ3RofSxoYXNoQWRkTm9kZShlKXt2YXIgcj1vLmhhc2hOYW1lKGUucGFyZW50LmlkLGUubmFtZSk7ZS5uYW1lX25leHQ9by5uYW1lVGFibGVbcl0sby5uYW1lVGFibGVbcl09ZX0saGFzaFJlbW92ZU5vZGUoZSl7dmFyIHI9by5oYXNoTmFtZShlLnBhcmVudC5pZCxlLm5hbWUpO2lmKG8ubmFtZVRhYmxlW3JdPT09ZSlvLm5hbWVUYWJsZVtyXT1lLm5hbWVfbmV4dDtlbHNlIGZvcih2YXIgdD1vLm5hbWVUYWJsZVtyXTt0Oyl7aWYodC5uYW1lX25leHQ9PT1lKXt0Lm5hbWVfbmV4dD1lLm5hbWVfbmV4dDticmVha310PXQubmFtZV9uZXh0fX0sbG9va3VwTm9kZShlLHIpe3ZhciB0PW8ubWF5TG9va3VwKGUpO2lmKHQpdGhyb3cgbmV3IG8uRXJybm9FcnJvcih0KTtmb3IodmFyIG49by5oYXNoTmFtZShlLmlkLHIpLGE9by5uYW1lVGFibGVbbl07YTthPWEubmFtZV9uZXh0KXt2YXIgaT1hLm5hbWU7aWYoYS5wYXJlbnQuaWQ9PT1lLmlkJiZpPT09cilyZXR1cm4gYX1yZXR1cm4gby5sb29rdXAoZSxyKX0sY3JlYXRlTm9kZShlLHIsdCxuKXt2YXIgYT1uZXcgby5GU05vZGUoZSxyLHQsbik7cmV0dXJuIG8uaGFzaEFkZE5vZGUoYSksYX0sZGVzdHJveU5vZGUoZSl7by5oYXNoUmVtb3ZlTm9kZShlKX0saXNSb290KGUpe3JldHVybiBlPT09ZS5wYXJlbnR9LGlzTW91bnRwb2ludChlKXtyZXR1cm4hIWUubW91bnRlZH0saXNGaWxlKGUpe3JldHVybihlJjYxNDQwKT09PTMyNzY4fSxpc0RpcihlKXtyZXR1cm4oZSY2MTQ0MCk9PT0xNjM4NH0saXNMaW5rKGUpe3JldHVybihlJjYxNDQwKT09PTQwOTYwfSxpc0NocmRldihlKXtyZXR1cm4oZSY2MTQ0MCk9PT04MTkyfSxpc0Jsa2RldihlKXtyZXR1cm4oZSY2MTQ0MCk9PT0yNDU3Nn0saXNGSUZPKGUpe3JldHVybihlJjYxNDQwKT09PTQwOTZ9LGlzU29ja2V0KGUpe3JldHVybihlJjQ5MTUyKT09PTQ5MTUyfSxmbGFnc1RvUGVybWlzc2lvblN0cmluZyhlKXt2YXIgcj1bInIiLCJ3IiwicnciXVtlJjNdO3JldHVybiBlJjUxMiYmKHIrPSJ3Iikscn0sbm9kZVBlcm1pc3Npb25zKGUscil7cmV0dXJuIG8uaWdub3JlUGVybWlzc2lvbnM/MDpyLmluY2x1ZGVzKCJyIikmJiEoZS5tb2RlJjI5Mil8fHIuaW5jbHVkZXMoInciKSYmIShlLm1vZGUmMTQ2KXx8ci5pbmNsdWRlcygieCIpJiYhKGUubW9kZSY3Myk/MjowfSxtYXlMb29rdXAoZSl7aWYoIW8uaXNEaXIoZS5tb2RlKSlyZXR1cm4gNTQ7dmFyIHI9by5ub2RlUGVybWlzc2lvbnMoZSwieCIpO3JldHVybiByfHwoZS5ub2RlX29wcy5sb29rdXA/MDoyKX0sbWF5Q3JlYXRlKGUscil7dHJ5e3ZhciB0PW8ubG9va3VwTm9kZShlLHIpO3JldHVybiAyMH1jYXRjaHt9cmV0dXJuIG8ubm9kZVBlcm1pc3Npb25zKGUsInd4Iil9LG1heURlbGV0ZShlLHIsdCl7dmFyIG47dHJ5e249by5sb29rdXBOb2RlKGUscil9Y2F0Y2goaSl7cmV0dXJuIGkuZXJybm99dmFyIGE9by5ub2RlUGVybWlzc2lvbnMoZSwid3giKTtpZihhKXJldHVybiBhO2lmKHQpe2lmKCFvLmlzRGlyKG4ubW9kZSkpcmV0dXJuIDU0O2lmKG8uaXNSb290KG4pfHxvLmdldFBhdGgobik9PT1vLmN3ZCgpKXJldHVybiAxMH1lbHNlIGlmKG8uaXNEaXIobi5tb2RlKSlyZXR1cm4gMzE7cmV0dXJuIDB9LG1heU9wZW4oZSxyKXtyZXR1cm4gZT9vLmlzTGluayhlLm1vZGUpPzMyOm8uaXNEaXIoZS5tb2RlKSYmKG8uZmxhZ3NUb1Blcm1pc3Npb25TdHJpbmcocikhPT0iciJ8fHImNTEyKT8zMTpvLm5vZGVQZXJtaXNzaW9ucyhlLG8uZmxhZ3NUb1Blcm1pc3Npb25TdHJpbmcocikpOjQ0fSxNQVhfT1BFTl9GRFM6NDA5NixuZXh0ZmQoKXtmb3IodmFyIGU9MDtlPD1vLk1BWF9PUEVOX0ZEUztlKyspaWYoIW8uc3RyZWFtc1tlXSlyZXR1cm4gZTt0aHJvdyBuZXcgby5FcnJub0Vycm9yKDMzKX0sZ2V0U3RyZWFtQ2hlY2tlZChlKXt2YXIgcj1vLmdldFN0cmVhbShlKTtpZighcil0aHJvdyBuZXcgby5FcnJub0Vycm9yKDgpO3JldHVybiByfSxnZXRTdHJlYW06ZT0+by5zdHJlYW1zW2VdLGNyZWF0ZVN0cmVhbShlLHI9LTEpe3JldHVybiBlPU9iamVjdC5hc3NpZ24obmV3IG8uRlNTdHJlYW0sZSkscj09LTEmJihyPW8ubmV4dGZkKCkpLGUuZmQ9cixvLnN0cmVhbXNbcl09ZSxlfSxjbG9zZVN0cmVhbShlKXtvLnN0cmVhbXNbZV09bnVsbH0sZHVwU3RyZWFtKGUscj0tMSl7dmFyIG4sYTt2YXIgdD1vLmNyZWF0ZVN0cmVhbShlLHIpO3JldHVybihhPShuPXQuc3RyZWFtX29wcyk9PW51bGw/dm9pZCAwOm4uZHVwKT09bnVsbHx8YS5jYWxsKG4sdCksdH0sY2hyZGV2X3N0cmVhbV9vcHM6e29wZW4oZSl7dmFyIHQsbjt2YXIgcj1vLmdldERldmljZShlLm5vZGUucmRldik7ZS5zdHJlYW1fb3BzPXIuc3RyZWFtX29wcywobj0odD1lLnN0cmVhbV9vcHMpLm9wZW4pPT1udWxsfHxuLmNhbGwodCxlKX0sbGxzZWVrKCl7dGhyb3cgbmV3IG8uRXJybm9FcnJvcig3MCl9fSxtYWpvcjplPT5lPj44LG1pbm9yOmU9PmUmMjU1LG1ha2VkZXY6KGUscik9PmU8PDh8cixyZWdpc3RlckRldmljZShlLHIpe28uZGV2aWNlc1tlXT17c3RyZWFtX29wczpyfX0sZ2V0RGV2aWNlOmU9Pm8uZGV2aWNlc1tlXSxnZXRNb3VudHMoZSl7Zm9yKHZhciByPVtdLHQ9W2VdO3QubGVuZ3RoOyl7dmFyIG49dC5wb3AoKTtyLnB1c2gobiksdC5wdXNoKC4uLm4ubW91bnRzKX1yZXR1cm4gcn0sc3luY2ZzKGUscil7dHlwZW9mIGU9PSJmdW5jdGlvbiImJihyPWUsZT0hMSksby5zeW5jRlNSZXF1ZXN0cysrLG8uc3luY0ZTUmVxdWVzdHM+MSYmZWUoYHdhcm5pbmc6ICR7by5zeW5jRlNSZXF1ZXN0c30gRlMuc3luY2ZzIG9wZXJhdGlvbnMgaW4gZmxpZ2h0IGF0IG9uY2UsIHByb2JhYmx5IGp1c3QgZG9pbmcgZXh0cmEgd29ya2ApO3ZhciB0PW8uZ2V0TW91bnRzKG8ucm9vdC5tb3VudCksbj0wO2Z1bmN0aW9uIGEocyl7cmV0dXJuIG8uc3luY0ZTUmVxdWVzdHMtLSxyKHMpfWZ1bmN0aW9uIGkocyl7aWYocylyZXR1cm4gaS5lcnJvcmVkP3ZvaWQgMDooaS5lcnJvcmVkPSEwLGEocykpOysrbj49dC5sZW5ndGgmJmEobnVsbCl9dC5mb3JFYWNoKHM9PntpZighcy50eXBlLnN5bmNmcylyZXR1cm4gaShudWxsKTtzLnR5cGUuc3luY2ZzKHMsZSxpKX0pfSxtb3VudChlLHIsdCl7dmFyIG49dD09PSIvIixhPSF0LGk7aWYobiYmby5yb290KXRocm93IG5ldyBvLkVycm5vRXJyb3IoMTApO2lmKCFuJiYhYSl7dmFyIHM9by5sb29rdXBQYXRoKHQse2ZvbGxvd19tb3VudDohMX0pO2lmKHQ9cy5wYXRoLGk9cy5ub2RlLG8uaXNNb3VudHBvaW50KGkpKXRocm93IG5ldyBvLkVycm5vRXJyb3IoMTApO2lmKCFvLmlzRGlyKGkubW9kZSkpdGhyb3cgbmV3IG8uRXJybm9FcnJvcig1NCl9dmFyIGw9e3R5cGU6ZSxvcHRzOnIsbW91bnRwb2ludDp0LG1vdW50czpbXX0sdT1lLm1vdW50KGwpO3JldHVybiB1Lm1vdW50PWwsbC5yb290PXUsbj9vLnJvb3Q9dTppJiYoaS5tb3VudGVkPWwsaS5tb3VudCYmaS5tb3VudC5tb3VudHMucHVzaChsKSksdX0sdW5tb3VudChlKXt2YXIgcj1vLmxvb2t1cFBhdGgoZSx7Zm9sbG93X21vdW50OiExfSk7aWYoIW8uaXNNb3VudHBvaW50KHIubm9kZSkpdGhyb3cgbmV3IG8uRXJybm9FcnJvcigyOCk7dmFyIHQ9ci5ub2RlLG49dC5tb3VudGVkLGE9by5nZXRNb3VudHMobik7T2JqZWN0LmtleXMoby5uYW1lVGFibGUpLmZvckVhY2gocz0+e2Zvcih2YXIgbD1vLm5hbWVUYWJsZVtzXTtsOyl7dmFyIHU9bC5uYW1lX25leHQ7YS5pbmNsdWRlcyhsLm1vdW50KSYmby5kZXN0cm95Tm9kZShsKSxsPXV9fSksdC5tb3VudGVkPW51bGw7dmFyIGk9dC5tb3VudC5tb3VudHMuaW5kZXhPZihuKTt0Lm1vdW50Lm1vdW50cy5zcGxpY2UoaSwxKX0sbG9va3VwKGUscil7cmV0dXJuIGUubm9kZV9vcHMubG9va3VwKGUscil9LG1rbm9kKGUscix0KXt2YXIgbj1vLmxvb2t1cFBhdGgoZSx7cGFyZW50OiEwfSksYT1uLm5vZGUsaT1TLmJhc2VuYW1lKGUpO2lmKCFpfHxpPT09Ii4ifHxpPT09Ii4uIil0aHJvdyBuZXcgby5FcnJub0Vycm9yKDI4KTt2YXIgcz1vLm1heUNyZWF0ZShhLGkpO2lmKHMpdGhyb3cgbmV3IG8uRXJybm9FcnJvcihzKTtpZighYS5ub2RlX29wcy5ta25vZCl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDYzKTtyZXR1cm4gYS5ub2RlX29wcy5ta25vZChhLGkscix0KX0sY3JlYXRlKGUscil7cmV0dXJuIHI9ciE9PXZvaWQgMD9yOjQzOCxyJj00MDk1LHJ8PTMyNzY4LG8ubWtub2QoZSxyLDApfSxta2RpcihlLHIpe3JldHVybiByPXIhPT12b2lkIDA/cjo1MTEsciY9MTAyMyxyfD0xNjM4NCxvLm1rbm9kKGUsciwwKX0sbWtkaXJUcmVlKGUscil7Zm9yKHZhciB0PWUuc3BsaXQoIi8iKSxuPSIiLGE9MDthPHQubGVuZ3RoOysrYSlpZih0W2FdKXtuKz0iLyIrdFthXTt0cnl7by5ta2RpcihuLHIpfWNhdGNoKGkpe2lmKGkuZXJybm8hPTIwKXRocm93IGl9fX0sbWtkZXYoZSxyLHQpe3JldHVybiB0eXBlb2YgdD4idSImJih0PXIscj00MzgpLHJ8PTgxOTIsby5ta25vZChlLHIsdCl9LHN5bWxpbmsoZSxyKXtpZighWC5yZXNvbHZlKGUpKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNDQpO3ZhciB0PW8ubG9va3VwUGF0aChyLHtwYXJlbnQ6ITB9KSxuPXQubm9kZTtpZighbil0aHJvdyBuZXcgby5FcnJub0Vycm9yKDQ0KTt2YXIgYT1TLmJhc2VuYW1lKHIpLGk9by5tYXlDcmVhdGUobixhKTtpZihpKXRocm93IG5ldyBvLkVycm5vRXJyb3IoaSk7aWYoIW4ubm9kZV9vcHMuc3ltbGluayl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDYzKTtyZXR1cm4gbi5ub2RlX29wcy5zeW1saW5rKG4sYSxlKX0scmVuYW1lKGUscil7dmFyIHQ9Uy5kaXJuYW1lKGUpLG49Uy5kaXJuYW1lKHIpLGE9Uy5iYXNlbmFtZShlKSxpPVMuYmFzZW5hbWUocikscyxsLHU7aWYocz1vLmxvb2t1cFBhdGgoZSx7cGFyZW50OiEwfSksbD1zLm5vZGUscz1vLmxvb2t1cFBhdGgocix7cGFyZW50OiEwfSksdT1zLm5vZGUsIWx8fCF1KXRocm93IG5ldyBvLkVycm5vRXJyb3IoNDQpO2lmKGwubW91bnQhPT11Lm1vdW50KXRocm93IG5ldyBvLkVycm5vRXJyb3IoNzUpO3ZhciBjPW8ubG9va3VwTm9kZShsLGEpLGQ9WC5yZWxhdGl2ZShlLG4pO2lmKGQuY2hhckF0KDApIT09Ii4iKXRocm93IG5ldyBvLkVycm5vRXJyb3IoMjgpO2lmKGQ9WC5yZWxhdGl2ZShyLHQpLGQuY2hhckF0KDApIT09Ii4iKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNTUpO3ZhciBtO3RyeXttPW8ubG9va3VwTm9kZSh1LGkpfWNhdGNoe31pZihjIT09bSl7dmFyIGg9by5pc0RpcihjLm1vZGUpLHA9by5tYXlEZWxldGUobCxhLGgpO2lmKHApdGhyb3cgbmV3IG8uRXJybm9FcnJvcihwKTtpZihwPW0/by5tYXlEZWxldGUodSxpLGgpOm8ubWF5Q3JlYXRlKHUsaSkscCl0aHJvdyBuZXcgby5FcnJub0Vycm9yKHApO2lmKCFsLm5vZGVfb3BzLnJlbmFtZSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDYzKTtpZihvLmlzTW91bnRwb2ludChjKXx8bSYmby5pc01vdW50cG9pbnQobSkpdGhyb3cgbmV3IG8uRXJybm9FcnJvcigxMCk7aWYodSE9PWwmJihwPW8ubm9kZVBlcm1pc3Npb25zKGwsInciKSxwKSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKHApO28uaGFzaFJlbW92ZU5vZGUoYyk7dHJ5e2wubm9kZV9vcHMucmVuYW1lKGMsdSxpKX1jYXRjaCh3KXt0aHJvdyB3fWZpbmFsbHl7by5oYXNoQWRkTm9kZShjKX19fSxybWRpcihlKXt2YXIgcj1vLmxvb2t1cFBhdGgoZSx7cGFyZW50OiEwfSksdD1yLm5vZGUsbj1TLmJhc2VuYW1lKGUpLGE9by5sb29rdXBOb2RlKHQsbiksaT1vLm1heURlbGV0ZSh0LG4sITApO2lmKGkpdGhyb3cgbmV3IG8uRXJybm9FcnJvcihpKTtpZighdC5ub2RlX29wcy5ybWRpcil0aHJvdyBuZXcgby5FcnJub0Vycm9yKDYzKTtpZihvLmlzTW91bnRwb2ludChhKSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDEwKTt0Lm5vZGVfb3BzLnJtZGlyKHQsbiksby5kZXN0cm95Tm9kZShhKX0scmVhZGRpcihlKXt2YXIgcj1vLmxvb2t1cFBhdGgoZSx7Zm9sbG93OiEwfSksdD1yLm5vZGU7aWYoIXQubm9kZV9vcHMucmVhZGRpcil0aHJvdyBuZXcgby5FcnJub0Vycm9yKDU0KTtyZXR1cm4gdC5ub2RlX29wcy5yZWFkZGlyKHQpfSx1bmxpbmsoZSl7dmFyIHI9by5sb29rdXBQYXRoKGUse3BhcmVudDohMH0pLHQ9ci5ub2RlO2lmKCF0KXRocm93IG5ldyBvLkVycm5vRXJyb3IoNDQpO3ZhciBuPVMuYmFzZW5hbWUoZSksYT1vLmxvb2t1cE5vZGUodCxuKSxpPW8ubWF5RGVsZXRlKHQsbiwhMSk7aWYoaSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKGkpO2lmKCF0Lm5vZGVfb3BzLnVubGluayl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDYzKTtpZihvLmlzTW91bnRwb2ludChhKSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDEwKTt0Lm5vZGVfb3BzLnVubGluayh0LG4pLG8uZGVzdHJveU5vZGUoYSl9LHJlYWRsaW5rKGUpe3ZhciByPW8ubG9va3VwUGF0aChlKSx0PXIubm9kZTtpZighdCl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDQ0KTtpZighdC5ub2RlX29wcy5yZWFkbGluayl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDI4KTtyZXR1cm4gWC5yZXNvbHZlKG8uZ2V0UGF0aCh0LnBhcmVudCksdC5ub2RlX29wcy5yZWFkbGluayh0KSl9LHN0YXQoZSxyKXt2YXIgdD1vLmxvb2t1cFBhdGgoZSx7Zm9sbG93OiFyfSksbj10Lm5vZGU7aWYoIW4pdGhyb3cgbmV3IG8uRXJybm9FcnJvcig0NCk7aWYoIW4ubm9kZV9vcHMuZ2V0YXR0cil0aHJvdyBuZXcgby5FcnJub0Vycm9yKDYzKTtyZXR1cm4gbi5ub2RlX29wcy5nZXRhdHRyKG4pfSxsc3RhdChlKXtyZXR1cm4gby5zdGF0KGUsITApfSxjaG1vZChlLHIsdCl7dmFyIG47aWYodHlwZW9mIGU9PSJzdHJpbmciKXt2YXIgYT1vLmxvb2t1cFBhdGgoZSx7Zm9sbG93OiF0fSk7bj1hLm5vZGV9ZWxzZSBuPWU7aWYoIW4ubm9kZV9vcHMuc2V0YXR0cil0aHJvdyBuZXcgby5FcnJub0Vycm9yKDYzKTtuLm5vZGVfb3BzLnNldGF0dHIobix7bW9kZTpyJjQwOTV8bi5tb2RlJi00MDk2LHRpbWVzdGFtcDpEYXRlLm5vdygpfSl9LGxjaG1vZChlLHIpe28uY2htb2QoZSxyLCEwKX0sZmNobW9kKGUscil7dmFyIHQ9by5nZXRTdHJlYW1DaGVja2VkKGUpO28uY2htb2QodC5ub2RlLHIpfSxjaG93bihlLHIsdCxuKXt2YXIgYTtpZih0eXBlb2YgZT09InN0cmluZyIpe3ZhciBpPW8ubG9va3VwUGF0aChlLHtmb2xsb3c6IW59KTthPWkubm9kZX1lbHNlIGE9ZTtpZighYS5ub2RlX29wcy5zZXRhdHRyKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNjMpO2Eubm9kZV9vcHMuc2V0YXR0cihhLHt0aW1lc3RhbXA6RGF0ZS5ub3coKX0pfSxsY2hvd24oZSxyLHQpe28uY2hvd24oZSxyLHQsITApfSxmY2hvd24oZSxyLHQpe3ZhciBuPW8uZ2V0U3RyZWFtQ2hlY2tlZChlKTtvLmNob3duKG4ubm9kZSxyLHQpfSx0cnVuY2F0ZShlLHIpe2lmKHI8MCl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDI4KTt2YXIgdDtpZih0eXBlb2YgZT09InN0cmluZyIpe3ZhciBuPW8ubG9va3VwUGF0aChlLHtmb2xsb3c6ITB9KTt0PW4ubm9kZX1lbHNlIHQ9ZTtpZighdC5ub2RlX29wcy5zZXRhdHRyKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNjMpO2lmKG8uaXNEaXIodC5tb2RlKSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDMxKTtpZighby5pc0ZpbGUodC5tb2RlKSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDI4KTt2YXIgYT1vLm5vZGVQZXJtaXNzaW9ucyh0LCJ3Iik7aWYoYSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKGEpO3Qubm9kZV9vcHMuc2V0YXR0cih0LHtzaXplOnIsdGltZXN0YW1wOkRhdGUubm93KCl9KX0sZnRydW5jYXRlKGUscil7dmFyIHQ9by5nZXRTdHJlYW1DaGVja2VkKGUpO2lmKCEodC5mbGFncyYyMDk3MTU1KSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDI4KTtvLnRydW5jYXRlKHQubm9kZSxyKX0sdXRpbWUoZSxyLHQpe3ZhciBuPW8ubG9va3VwUGF0aChlLHtmb2xsb3c6ITB9KSxhPW4ubm9kZTthLm5vZGVfb3BzLnNldGF0dHIoYSx7dGltZXN0YW1wOk1hdGgubWF4KHIsdCl9KX0sb3BlbihlLHIsdCl7aWYoZT09PSIiKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNDQpO3I9dHlwZW9mIHI9PSJzdHJpbmciP1V0KHIpOnIsciY2ND8odD10eXBlb2YgdD4idSI/NDM4OnQsdD10JjQwOTV8MzI3NjgpOnQ9MDt2YXIgbjtpZih0eXBlb2YgZT09Im9iamVjdCIpbj1lO2Vsc2V7ZT1TLm5vcm1hbGl6ZShlKTt0cnl7dmFyIGE9by5sb29rdXBQYXRoKGUse2ZvbGxvdzohKHImMTMxMDcyKX0pO249YS5ub2RlfWNhdGNoe319dmFyIGk9ITE7aWYociY2NClpZihuKXtpZihyJjEyOCl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDIwKX1lbHNlIG49by5ta25vZChlLHQsMCksaT0hMDtpZighbil0aHJvdyBuZXcgby5FcnJub0Vycm9yKDQ0KTtpZihvLmlzQ2hyZGV2KG4ubW9kZSkmJihyJj0tNTEzKSxyJjY1NTM2JiYhby5pc0RpcihuLm1vZGUpKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNTQpO2lmKCFpKXt2YXIgcz1vLm1heU9wZW4obixyKTtpZihzKXRocm93IG5ldyBvLkVycm5vRXJyb3Iocyl9ciY1MTImJiFpJiZvLnRydW5jYXRlKG4sMCksciY9LTEzMTcxMzt2YXIgbD1vLmNyZWF0ZVN0cmVhbSh7bm9kZTpuLHBhdGg6by5nZXRQYXRoKG4pLGZsYWdzOnIsc2Vla2FibGU6ITAscG9zaXRpb246MCxzdHJlYW1fb3BzOm4uc3RyZWFtX29wcyx1bmdvdHRlbjpbXSxlcnJvcjohMX0pO3JldHVybiBsLnN0cmVhbV9vcHMub3BlbiYmbC5zdHJlYW1fb3BzLm9wZW4obCksZi5sb2dSZWFkRmlsZXMmJiEociYxKSYmKG8ucmVhZEZpbGVzfHwoby5yZWFkRmlsZXM9e30pLGUgaW4gby5yZWFkRmlsZXN8fChvLnJlYWRGaWxlc1tlXT0xKSksbH0sY2xvc2UoZSl7aWYoby5pc0Nsb3NlZChlKSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDgpO2UuZ2V0ZGVudHMmJihlLmdldGRlbnRzPW51bGwpO3RyeXtlLnN0cmVhbV9vcHMuY2xvc2UmJmUuc3RyZWFtX29wcy5jbG9zZShlKX1jYXRjaChyKXt0aHJvdyByfWZpbmFsbHl7by5jbG9zZVN0cmVhbShlLmZkKX1lLmZkPW51bGx9LGlzQ2xvc2VkKGUpe3JldHVybiBlLmZkPT09bnVsbH0sbGxzZWVrKGUscix0KXtpZihvLmlzQ2xvc2VkKGUpKXRocm93IG5ldyBvLkVycm5vRXJyb3IoOCk7aWYoIWUuc2Vla2FibGV8fCFlLnN0cmVhbV9vcHMubGxzZWVrKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNzApO2lmKHQhPTAmJnQhPTEmJnQhPTIpdGhyb3cgbmV3IG8uRXJybm9FcnJvcigyOCk7cmV0dXJuIGUucG9zaXRpb249ZS5zdHJlYW1fb3BzLmxsc2VlayhlLHIsdCksZS51bmdvdHRlbj1bXSxlLnBvc2l0aW9ufSxyZWFkKGUscix0LG4sYSl7aWYobjwwfHxhPDApdGhyb3cgbmV3IG8uRXJybm9FcnJvcigyOCk7aWYoby5pc0Nsb3NlZChlKSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDgpO2lmKChlLmZsYWdzJjIwOTcxNTUpPT09MSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDgpO2lmKG8uaXNEaXIoZS5ub2RlLm1vZGUpKXRocm93IG5ldyBvLkVycm5vRXJyb3IoMzEpO2lmKCFlLnN0cmVhbV9vcHMucmVhZCl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDI4KTt2YXIgaT10eXBlb2YgYTwidSI7aWYoIWkpYT1lLnBvc2l0aW9uO2Vsc2UgaWYoIWUuc2Vla2FibGUpdGhyb3cgbmV3IG8uRXJybm9FcnJvcig3MCk7dmFyIHM9ZS5zdHJlYW1fb3BzLnJlYWQoZSxyLHQsbixhKTtyZXR1cm4gaXx8KGUucG9zaXRpb24rPXMpLHN9LHdyaXRlKGUscix0LG4sYSxpKXtpZihuPDB8fGE8MCl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDI4KTtpZihvLmlzQ2xvc2VkKGUpKXRocm93IG5ldyBvLkVycm5vRXJyb3IoOCk7aWYoIShlLmZsYWdzJjIwOTcxNTUpKXRocm93IG5ldyBvLkVycm5vRXJyb3IoOCk7aWYoby5pc0RpcihlLm5vZGUubW9kZSkpdGhyb3cgbmV3IG8uRXJybm9FcnJvcigzMSk7aWYoIWUuc3RyZWFtX29wcy53cml0ZSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDI4KTtlLnNlZWthYmxlJiZlLmZsYWdzJjEwMjQmJm8ubGxzZWVrKGUsMCwyKTt2YXIgcz10eXBlb2YgYTwidSI7aWYoIXMpYT1lLnBvc2l0aW9uO2Vsc2UgaWYoIWUuc2Vla2FibGUpdGhyb3cgbmV3IG8uRXJybm9FcnJvcig3MCk7dmFyIGw9ZS5zdHJlYW1fb3BzLndyaXRlKGUscix0LG4sYSxpKTtyZXR1cm4gc3x8KGUucG9zaXRpb24rPWwpLGx9LGFsbG9jYXRlKGUscix0KXtpZihvLmlzQ2xvc2VkKGUpKXRocm93IG5ldyBvLkVycm5vRXJyb3IoOCk7aWYocjwwfHx0PD0wKXRocm93IG5ldyBvLkVycm5vRXJyb3IoMjgpO2lmKCEoZS5mbGFncyYyMDk3MTU1KSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDgpO2lmKCFvLmlzRmlsZShlLm5vZGUubW9kZSkmJiFvLmlzRGlyKGUubm9kZS5tb2RlKSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDQzKTtpZighZS5zdHJlYW1fb3BzLmFsbG9jYXRlKXRocm93IG5ldyBvLkVycm5vRXJyb3IoMTM4KTtlLnN0cmVhbV9vcHMuYWxsb2NhdGUoZSxyLHQpfSxtbWFwKGUscix0LG4sYSl7aWYobiYyJiYhKGEmMikmJihlLmZsYWdzJjIwOTcxNTUpIT09Mil0aHJvdyBuZXcgby5FcnJub0Vycm9yKDIpO2lmKChlLmZsYWdzJjIwOTcxNTUpPT09MSl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDIpO2lmKCFlLnN0cmVhbV9vcHMubW1hcCl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDQzKTtyZXR1cm4gZS5zdHJlYW1fb3BzLm1tYXAoZSxyLHQsbixhKX0sbXN5bmMoZSxyLHQsbixhKXtyZXR1cm4gZS5zdHJlYW1fb3BzLm1zeW5jP2Uuc3RyZWFtX29wcy5tc3luYyhlLHIsdCxuLGEpOjB9LGlvY3RsKGUscix0KXtpZighZS5zdHJlYW1fb3BzLmlvY3RsKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNTkpO3JldHVybiBlLnN0cmVhbV9vcHMuaW9jdGwoZSxyLHQpfSxyZWFkRmlsZShlLHI9e30pe2lmKHIuZmxhZ3M9ci5mbGFnc3x8MCxyLmVuY29kaW5nPXIuZW5jb2Rpbmd8fCJiaW5hcnkiLHIuZW5jb2RpbmchPT0idXRmOCImJnIuZW5jb2RpbmchPT0iYmluYXJ5Iil0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZW5jb2RpbmcgdHlwZSAiJHtyLmVuY29kaW5nfSJgKTt2YXIgdCxuPW8ub3BlbihlLHIuZmxhZ3MpLGE9by5zdGF0KGUpLGk9YS5zaXplLHM9bmV3IFVpbnQ4QXJyYXkoaSk7cmV0dXJuIG8ucmVhZChuLHMsMCxpLDApLHIuZW5jb2Rpbmc9PT0idXRmOCI/dD1jZShzLDApOnIuZW5jb2Rpbmc9PT0iYmluYXJ5IiYmKHQ9cyksby5jbG9zZShuKSx0fSx3cml0ZUZpbGUoZSxyLHQ9e30pe3QuZmxhZ3M9dC5mbGFnc3x8NTc3O3ZhciBuPW8ub3BlbihlLHQuZmxhZ3MsdC5tb2RlKTtpZih0eXBlb2Ygcj09InN0cmluZyIpe3ZhciBhPW5ldyBVaW50OEFycmF5KFplKHIpKzEpLGk9UWUocixhLDAsYS5sZW5ndGgpO28ud3JpdGUobixhLDAsaSx2b2lkIDAsdC5jYW5Pd24pfWVsc2UgaWYoQXJyYXlCdWZmZXIuaXNWaWV3KHIpKW8ud3JpdGUobixyLDAsci5ieXRlTGVuZ3RoLHZvaWQgMCx0LmNhbk93bik7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIGRhdGEgdHlwZSIpO28uY2xvc2Uobil9LGN3ZDooKT0+by5jdXJyZW50UGF0aCxjaGRpcihlKXt2YXIgcj1vLmxvb2t1cFBhdGgoZSx7Zm9sbG93OiEwfSk7aWYoci5ub2RlPT09bnVsbCl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDQ0KTtpZighby5pc0RpcihyLm5vZGUubW9kZSkpdGhyb3cgbmV3IG8uRXJybm9FcnJvcig1NCk7dmFyIHQ9by5ub2RlUGVybWlzc2lvbnMoci5ub2RlLCJ4Iik7aWYodCl0aHJvdyBuZXcgby5FcnJub0Vycm9yKHQpO28uY3VycmVudFBhdGg9ci5wYXRofSxjcmVhdGVEZWZhdWx0RGlyZWN0b3JpZXMoKXtvLm1rZGlyKCIvdG1wIiksby5ta2RpcigiL2hvbWUiKSxvLm1rZGlyKCIvaG9tZS93ZWJfdXNlciIpfSxjcmVhdGVEZWZhdWx0RGV2aWNlcygpe28ubWtkaXIoIi9kZXYiKSxvLnJlZ2lzdGVyRGV2aWNlKG8ubWFrZWRldigxLDMpLHtyZWFkOigpPT4wLHdyaXRlOihuLGEsaSxzLGwpPT5zfSksby5ta2RldigiL2Rldi9udWxsIixvLm1ha2VkZXYoMSwzKSksbGUucmVnaXN0ZXIoby5tYWtlZGV2KDUsMCksbGUuZGVmYXVsdF90dHlfb3BzKSxsZS5yZWdpc3RlcihvLm1ha2VkZXYoNiwwKSxsZS5kZWZhdWx0X3R0eTFfb3BzKSxvLm1rZGV2KCIvZGV2L3R0eSIsby5tYWtlZGV2KDUsMCkpLG8ubWtkZXYoIi9kZXYvdHR5MSIsby5tYWtlZGV2KDYsMCkpO3ZhciBlPW5ldyBVaW50OEFycmF5KDEwMjQpLHI9MCx0PSgpPT4ocj09PTAmJihyPUZyKGUpLmJ5dGVMZW5ndGgpLGVbLS1yXSk7by5jcmVhdGVEZXZpY2UoIi9kZXYiLCJyYW5kb20iLHQpLG8uY3JlYXRlRGV2aWNlKCIvZGV2IiwidXJhbmRvbSIsdCksby5ta2RpcigiL2Rldi9zaG0iKSxvLm1rZGlyKCIvZGV2L3NobS90bXAiKX0sY3JlYXRlU3BlY2lhbERpcmVjdG9yaWVzKCl7by5ta2RpcigiL3Byb2MiKTt2YXIgZT1vLm1rZGlyKCIvcHJvYy9zZWxmIik7by5ta2RpcigiL3Byb2Mvc2VsZi9mZCIpLG8ubW91bnQoe21vdW50KCl7dmFyIHI9by5jcmVhdGVOb2RlKGUsImZkIiwxNjg5NSw3Myk7cmV0dXJuIHIubm9kZV9vcHM9e2xvb2t1cCh0LG4pe3ZhciBhPStuLGk9by5nZXRTdHJlYW1DaGVja2VkKGEpLHM9e3BhcmVudDpudWxsLG1vdW50Onttb3VudHBvaW50OiJmYWtlIn0sbm9kZV9vcHM6e3JlYWRsaW5rOigpPT5pLnBhdGh9fTtyZXR1cm4gcy5wYXJlbnQ9cyxzfX0scn19LHt9LCIvcHJvYy9zZWxmL2ZkIil9LGNyZWF0ZVN0YW5kYXJkU3RyZWFtcygpe2Yuc3RkaW4/by5jcmVhdGVEZXZpY2UoIi9kZXYiLCJzdGRpbiIsZi5zdGRpbik6by5zeW1saW5rKCIvZGV2L3R0eSIsIi9kZXYvc3RkaW4iKSxmLnN0ZG91dD9vLmNyZWF0ZURldmljZSgiL2RldiIsInN0ZG91dCIsbnVsbCxmLnN0ZG91dCk6by5zeW1saW5rKCIvZGV2L3R0eSIsIi9kZXYvc3Rkb3V0IiksZi5zdGRlcnI/by5jcmVhdGVEZXZpY2UoIi9kZXYiLCJzdGRlcnIiLG51bGwsZi5zdGRlcnIpOm8uc3ltbGluaygiL2Rldi90dHkxIiwiL2Rldi9zdGRlcnIiKSxvLm9wZW4oIi9kZXYvc3RkaW4iLDApLG8ub3BlbigiL2Rldi9zdGRvdXQiLDEpLG8ub3BlbigiL2Rldi9zdGRlcnIiLDEpfSxzdGF0aWNJbml0KCl7WzQ0XS5mb3JFYWNoKGU9PntvLmdlbmVyaWNFcnJvcnNbZV09bmV3IG8uRXJybm9FcnJvcihlKSxvLmdlbmVyaWNFcnJvcnNbZV0uc3RhY2s9IjxnZW5lcmljIGVycm9yLCBubyBzdGFjaz4ifSksby5uYW1lVGFibGU9bmV3IEFycmF5KDQwOTYpLG8ubW91bnQoYix7fSwiLyIpLG8uY3JlYXRlRGVmYXVsdERpcmVjdG9yaWVzKCksby5jcmVhdGVEZWZhdWx0RGV2aWNlcygpLG8uY3JlYXRlU3BlY2lhbERpcmVjdG9yaWVzKCksby5maWxlc3lzdGVtcz17TUVNRlM6YixXT1JLRVJGUzpWfX0saW5pdChlLHIsdCl7by5pbml0LmluaXRpYWxpemVkPSEwLGYuc3RkaW49ZXx8Zi5zdGRpbixmLnN0ZG91dD1yfHxmLnN0ZG91dCxmLnN0ZGVycj10fHxmLnN0ZGVycixvLmNyZWF0ZVN0YW5kYXJkU3RyZWFtcygpfSxxdWl0KCl7by5pbml0LmluaXRpYWxpemVkPSExO2Zvcih2YXIgZT0wO2U8by5zdHJlYW1zLmxlbmd0aDtlKyspe3ZhciByPW8uc3RyZWFtc1tlXTtyJiZvLmNsb3NlKHIpfX0sZmluZE9iamVjdChlLHIpe3ZhciB0PW8uYW5hbHl6ZVBhdGgoZSxyKTtyZXR1cm4gdC5leGlzdHM/dC5vYmplY3Q6bnVsbH0sYW5hbHl6ZVBhdGgoZSxyKXt0cnl7dmFyIHQ9by5sb29rdXBQYXRoKGUse2ZvbGxvdzohcn0pO2U9dC5wYXRofWNhdGNoe312YXIgbj17aXNSb290OiExLGV4aXN0czohMSxlcnJvcjowLG5hbWU6bnVsbCxwYXRoOm51bGwsb2JqZWN0Om51bGwscGFyZW50RXhpc3RzOiExLHBhcmVudFBhdGg6bnVsbCxwYXJlbnRPYmplY3Q6bnVsbH07dHJ5e3ZhciB0PW8ubG9va3VwUGF0aChlLHtwYXJlbnQ6ITB9KTtuLnBhcmVudEV4aXN0cz0hMCxuLnBhcmVudFBhdGg9dC5wYXRoLG4ucGFyZW50T2JqZWN0PXQubm9kZSxuLm5hbWU9Uy5iYXNlbmFtZShlKSx0PW8ubG9va3VwUGF0aChlLHtmb2xsb3c6IXJ9KSxuLmV4aXN0cz0hMCxuLnBhdGg9dC5wYXRoLG4ub2JqZWN0PXQubm9kZSxuLm5hbWU9dC5ub2RlLm5hbWUsbi5pc1Jvb3Q9dC5wYXRoPT09Ii8ifWNhdGNoKGEpe24uZXJyb3I9YS5lcnJub31yZXR1cm4gbn0sY3JlYXRlUGF0aChlLHIsdCxuKXtlPXR5cGVvZiBlPT0ic3RyaW5nIj9lOm8uZ2V0UGF0aChlKTtmb3IodmFyIGE9ci5zcGxpdCgiLyIpLnJldmVyc2UoKTthLmxlbmd0aDspe3ZhciBpPWEucG9wKCk7aWYoaSl7dmFyIHM9Uy5qb2luMihlLGkpO3RyeXtvLm1rZGlyKHMpfWNhdGNoe31lPXN9fXJldHVybiBzfSxjcmVhdGVGaWxlKGUscix0LG4sYSl7dmFyIGk9Uy5qb2luMih0eXBlb2YgZT09InN0cmluZyI/ZTpvLmdldFBhdGgoZSkscikscz1lcihuLGEpO3JldHVybiBvLmNyZWF0ZShpLHMpfSxjcmVhdGVEYXRhRmlsZShlLHIsdCxuLGEsaSl7dmFyIHM9cjtlJiYoZT10eXBlb2YgZT09InN0cmluZyI/ZTpvLmdldFBhdGgoZSkscz1yP1Muam9pbjIoZSxyKTplKTt2YXIgbD1lcihuLGEpLHU9by5jcmVhdGUocyxsKTtpZih0KXtpZih0eXBlb2YgdD09InN0cmluZyIpe2Zvcih2YXIgYz1uZXcgQXJyYXkodC5sZW5ndGgpLGQ9MCxtPXQubGVuZ3RoO2Q8bTsrK2QpY1tkXT10LmNoYXJDb2RlQXQoZCk7dD1jfW8uY2htb2QodSxsfDE0Nik7dmFyIGg9by5vcGVuKHUsNTc3KTtvLndyaXRlKGgsdCwwLHQubGVuZ3RoLDAsaSksby5jbG9zZShoKSxvLmNobW9kKHUsbCl9fSxjcmVhdGVEZXZpY2UoZSxyLHQsbil7dmFyIGE9Uy5qb2luMih0eXBlb2YgZT09InN0cmluZyI/ZTpvLmdldFBhdGgoZSksciksaT1lcighIXQsISFuKTtvLmNyZWF0ZURldmljZS5tYWpvcnx8KG8uY3JlYXRlRGV2aWNlLm1ham9yPTY0KTt2YXIgcz1vLm1ha2VkZXYoby5jcmVhdGVEZXZpY2UubWFqb3IrKywwKTtyZXR1cm4gby5yZWdpc3RlckRldmljZShzLHtvcGVuKGwpe2wuc2Vla2FibGU9ITF9LGNsb3NlKGwpe3ZhciB1Oyh1PW49PW51bGw/dm9pZCAwOm4uYnVmZmVyKSE9bnVsbCYmdS5sZW5ndGgmJm4oMTApfSxyZWFkKGwsdSxjLGQsbSl7Zm9yKHZhciBoPTAscD0wO3A8ZDtwKyspe3ZhciB3O3RyeXt3PXQoKX1jYXRjaHt0aHJvdyBuZXcgby5FcnJub0Vycm9yKDI5KX1pZih3PT09dm9pZCAwJiZoPT09MCl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDYpO2lmKHc9PW51bGwpYnJlYWs7aCsrLHVbYytwXT13fXJldHVybiBoJiYobC5ub2RlLnRpbWVzdGFtcD1EYXRlLm5vdygpKSxofSx3cml0ZShsLHUsYyxkLG0pe2Zvcih2YXIgaD0wO2g8ZDtoKyspdHJ5e24odVtjK2hdKX1jYXRjaHt0aHJvdyBuZXcgby5FcnJub0Vycm9yKDI5KX1yZXR1cm4gZCYmKGwubm9kZS50aW1lc3RhbXA9RGF0ZS5ub3coKSksaH19KSxvLm1rZGV2KGEsaSxzKX0sZm9yY2VMb2FkRmlsZShlKXtpZihlLmlzRGV2aWNlfHxlLmlzRm9sZGVyfHxlLmxpbmt8fGUuY29udGVudHMpcmV0dXJuITA7aWYodHlwZW9mIFhNTEh0dHBSZXF1ZXN0PCJ1Iil0aHJvdyBuZXcgRXJyb3IoIkxhenkgbG9hZGluZyBzaG91bGQgaGF2ZSBiZWVuIHBlcmZvcm1lZCAoY29udGVudHMgc2V0KSBpbiBjcmVhdGVMYXp5RmlsZSwgYnV0IGl0IHdhcyBub3QuIExhenkgbG9hZGluZyBvbmx5IHdvcmtzIGluIHdlYiB3b3JrZXJzLiBVc2UgLS1lbWJlZC1maWxlIG9yIC0tcHJlbG9hZC1maWxlIGluIGVtY2Mgb24gdGhlIG1haW4gdGhyZWFkLiIpO2lmKFllKXRyeXtlLmNvbnRlbnRzPVNlKFllKGUudXJsKSwhMCksZS51c2VkQnl0ZXM9ZS5jb250ZW50cy5sZW5ndGh9Y2F0Y2h7dGhyb3cgbmV3IG8uRXJybm9FcnJvcigyOSl9ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBsb2FkIHdpdGhvdXQgcmVhZCgpIG9yIFhNTEh0dHBSZXF1ZXN0LiIpfSxjcmVhdGVMYXp5RmlsZShlLHIsdCxuLGEpe2NsYXNzIGl7Y29uc3RydWN0b3IoKXt0aGlzLmxlbmd0aEtub3duPSExLHRoaXMuY2h1bmtzPVtdfWdldChwKXtpZighKHA+dGhpcy5sZW5ndGgtMXx8cDwwKSl7dmFyIHc9cCV0aGlzLmNodW5rU2l6ZSxEPXAvdGhpcy5jaHVua1NpemV8MDtyZXR1cm4gdGhpcy5nZXR0ZXIoRClbd119fXNldERhdGFHZXR0ZXIocCl7dGhpcy5nZXR0ZXI9cH1jYWNoZUxlbmd0aCgpe3ZhciBwPW5ldyBYTUxIdHRwUmVxdWVzdDtpZihwLm9wZW4oIkhFQUQiLHQsITEpLHAuc2VuZChudWxsKSwhKHAuc3RhdHVzPj0yMDAmJnAuc3RhdHVzPDMwMHx8cC5zdGF0dXM9PT0zMDQpKXRocm93IG5ldyBFcnJvcigiQ291bGRuJ3QgbG9hZCAiK3QrIi4gU3RhdHVzOiAiK3Auc3RhdHVzKTt2YXIgdz1OdW1iZXIocC5nZXRSZXNwb25zZUhlYWRlcigiQ29udGVudC1sZW5ndGgiKSksRCxNPShEPXAuZ2V0UmVzcG9uc2VIZWFkZXIoIkFjY2VwdC1SYW5nZXMiKSkmJkQ9PT0iYnl0ZXMiLEY9KEQ9cC5nZXRSZXNwb25zZUhlYWRlcigiQ29udGVudC1FbmNvZGluZyIpKSYmRD09PSJnemlwIix2PTEwMjQqMTAyNDtNfHwodj13KTt2YXIgXz0oVCxCKT0+e2lmKFQ+Qil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgcmFuZ2UgKCIrVCsiLCAiK0IrIikgb3Igbm8gYnl0ZXMgcmVxdWVzdGVkISIpO2lmKEI+dy0xKXRocm93IG5ldyBFcnJvcigib25seSAiK3crIiBieXRlcyBhdmFpbGFibGUhIHByb2dyYW1tZXIgZXJyb3IhIik7dmFyIE89bmV3IFhNTEh0dHBSZXF1ZXN0O2lmKE8ub3BlbigiR0VUIix0LCExKSx3IT09diYmTy5zZXRSZXF1ZXN0SGVhZGVyKCJSYW5nZSIsImJ5dGVzPSIrVCsiLSIrQiksTy5yZXNwb25zZVR5cGU9ImFycmF5YnVmZmVyIixPLm92ZXJyaWRlTWltZVR5cGUmJk8ub3ZlcnJpZGVNaW1lVHlwZSgidGV4dC9wbGFpbjsgY2hhcnNldD14LXVzZXItZGVmaW5lZCIpLE8uc2VuZChudWxsKSwhKE8uc3RhdHVzPj0yMDAmJk8uc3RhdHVzPDMwMHx8Ty5zdGF0dXM9PT0zMDQpKXRocm93IG5ldyBFcnJvcigiQ291bGRuJ3QgbG9hZCAiK3QrIi4gU3RhdHVzOiAiK08uc3RhdHVzKTtyZXR1cm4gTy5yZXNwb25zZSE9PXZvaWQgMD9uZXcgVWludDhBcnJheShPLnJlc3BvbnNlfHxbXSk6U2UoTy5yZXNwb25zZVRleHR8fCIiLCEwKX0sTD10aGlzO0wuc2V0RGF0YUdldHRlcihUPT57dmFyIEI9VCp2LE89KFQrMSkqdi0xO2lmKE89TWF0aC5taW4oTyx3LTEpLHR5cGVvZiBMLmNodW5rc1tUXT4idSImJihMLmNodW5rc1tUXT1fKEIsTykpLHR5cGVvZiBMLmNodW5rc1tUXT4idSIpdGhyb3cgbmV3IEVycm9yKCJkb1hIUiBmYWlsZWQhIik7cmV0dXJuIEwuY2h1bmtzW1RdfSksKEZ8fCF3KSYmKHY9dz0xLHc9dGhpcy5nZXR0ZXIoMCkubGVuZ3RoLHY9dyxxZSgiTGF6eUZpbGVzIG9uIGd6aXAgZm9yY2VzIGRvd25sb2FkIG9mIHRoZSB3aG9sZSBmaWxlIHdoZW4gbGVuZ3RoIGlzIGFjY2Vzc2VkIikpLHRoaXMuX2xlbmd0aD13LHRoaXMuX2NodW5rU2l6ZT12LHRoaXMubGVuZ3RoS25vd249ITB9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLmxlbmd0aEtub3dufHx0aGlzLmNhY2hlTGVuZ3RoKCksdGhpcy5fbGVuZ3RofWdldCBjaHVua1NpemUoKXtyZXR1cm4gdGhpcy5sZW5ndGhLbm93bnx8dGhpcy5jYWNoZUxlbmd0aCgpLHRoaXMuX2NodW5rU2l6ZX19aWYodHlwZW9mIFhNTEh0dHBSZXF1ZXN0PCJ1Iil2YXIgcz1uZXcgaSxsPXtpc0RldmljZTohMSxjb250ZW50czpzfTtlbHNlIHZhciBsPXtpc0RldmljZTohMSx1cmw6dH07dmFyIHU9by5jcmVhdGVGaWxlKGUscixsLG4sYSk7bC5jb250ZW50cz91LmNvbnRlbnRzPWwuY29udGVudHM6bC51cmwmJih1LmNvbnRlbnRzPW51bGwsdS51cmw9bC51cmwpLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHUse3VzZWRCeXRlczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29udGVudHMubGVuZ3RofX19KTt2YXIgYz17fSxkPU9iamVjdC5rZXlzKHUuc3RyZWFtX29wcyk7ZC5mb3JFYWNoKGg9Pnt2YXIgcD11LnN0cmVhbV9vcHNbaF07Y1toXT0oLi4udyk9PihvLmZvcmNlTG9hZEZpbGUodSkscCguLi53KSl9KTtmdW5jdGlvbiBtKGgscCx3LEQsTSl7dmFyIEY9aC5ub2RlLmNvbnRlbnRzO2lmKE0+PUYubGVuZ3RoKXJldHVybiAwO3ZhciB2PU1hdGgubWluKEYubGVuZ3RoLU0sRCk7aWYoRi5zbGljZSlmb3IodmFyIF89MDtfPHY7XysrKXBbdytfXT1GW00rX107ZWxzZSBmb3IodmFyIF89MDtfPHY7XysrKXBbdytfXT1GLmdldChNK18pO3JldHVybiB2fXJldHVybiBjLnJlYWQ9KGgscCx3LEQsTSk9PihvLmZvcmNlTG9hZEZpbGUodSksbShoLHAsdyxELE0pKSxjLm1tYXA9KGgscCx3LEQsTSk9PntvLmZvcmNlTG9hZEZpbGUodSk7dmFyIEY9VHIoKTtpZighRil0aHJvdyBuZXcgby5FcnJub0Vycm9yKDQ4KTtyZXR1cm4gbShoLEksRixwLHcpLHtwdHI6RixhbGxvY2F0ZWQ6ITB9fSx1LnN0cmVhbV9vcHM9Yyx1fX0sUD17REVGQVVMVF9QT0xMTUFTSzo1LGNhbGN1bGF0ZUF0KGUscix0KXtpZihTLmlzQWJzKHIpKXJldHVybiByO3ZhciBuO2lmKGU9PT0tMTAwKW49by5jd2QoKTtlbHNle3ZhciBhPVAuZ2V0U3RyZWFtRnJvbUZEKGUpO249YS5wYXRofWlmKHIubGVuZ3RoPT0wKXtpZighdCl0aHJvdyBuZXcgby5FcnJub0Vycm9yKDQ0KTtyZXR1cm4gbn1yZXR1cm4gUy5qb2luMihuLHIpfSxkb1N0YXQoZSxyLHQpe3ZhciBuPWUocik7Z1t0Pj4yXT1uLmRldixnW3QrND4+Ml09bi5tb2RlLEFbdCs4Pj4yXT1uLm5saW5rLGdbdCsxMj4+Ml09bi51aWQsZ1t0KzE2Pj4yXT1uLmdpZCxnW3QrMjA+PjJdPW4ucmRldiwkPVtuLnNpemU+Pj4wLCh5PW4uc2l6ZSwrTWF0aC5hYnMoeSk+PTE/eT4wPytNYXRoLmZsb29yKHkvNDI5NDk2NzI5Nik+Pj4wOn5+K01hdGguY2VpbCgoeS0rKH5+eT4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCldLGdbdCsyND4+Ml09JFswXSxnW3QrMjg+PjJdPSRbMV0sZ1t0KzMyPj4yXT00MDk2LGdbdCszNj4+Ml09bi5ibG9ja3M7dmFyIGE9bi5hdGltZS5nZXRUaW1lKCksaT1uLm10aW1lLmdldFRpbWUoKSxzPW4uY3RpbWUuZ2V0VGltZSgpO3JldHVybiAkPVtNYXRoLmZsb29yKGEvMWUzKT4+PjAsKHk9TWF0aC5mbG9vcihhLzFlMyksK01hdGguYWJzKHkpPj0xP3k+MD8rTWF0aC5mbG9vcih5LzQyOTQ5NjcyOTYpPj4+MDp+fitNYXRoLmNlaWwoKHktKyh+fnk+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxnW3QrNDA+PjJdPSRbMF0sZ1t0KzQ0Pj4yXT0kWzFdLEFbdCs0OD4+Ml09YSUxZTMqMWUzLCQ9W01hdGguZmxvb3IoaS8xZTMpPj4+MCwoeT1NYXRoLmZsb29yKGkvMWUzKSwrTWF0aC5hYnMoeSk+PTE/eT4wPytNYXRoLmZsb29yKHkvNDI5NDk2NzI5Nik+Pj4wOn5+K01hdGguY2VpbCgoeS0rKH5+eT4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCldLGdbdCs1Nj4+Ml09JFswXSxnW3QrNjA+PjJdPSRbMV0sQVt0KzY0Pj4yXT1pJTFlMyoxZTMsJD1bTWF0aC5mbG9vcihzLzFlMyk+Pj4wLCh5PU1hdGguZmxvb3Iocy8xZTMpLCtNYXRoLmFicyh5KT49MT95PjA/K01hdGguZmxvb3IoeS80Mjk0OTY3Mjk2KT4+PjA6fn4rTWF0aC5jZWlsKCh5LSsofn55Pj4+MCkpLzQyOTQ5NjcyOTYpPj4+MDowKV0sZ1t0KzcyPj4yXT0kWzBdLGdbdCs3Nj4+Ml09JFsxXSxBW3QrODA+PjJdPXMlMWUzKjFlMywkPVtuLmlubz4+PjAsKHk9bi5pbm8sK01hdGguYWJzKHkpPj0xP3k+MD8rTWF0aC5mbG9vcih5LzQyOTQ5NjcyOTYpPj4+MDp+fitNYXRoLmNlaWwoKHktKyh+fnk+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxnW3QrODg+PjJdPSRbMF0sZ1t0KzkyPj4yXT0kWzFdLDB9LGRvTXN5bmMoZSxyLHQsbixhKXtpZighby5pc0ZpbGUoci5ub2RlLm1vZGUpKXRocm93IG5ldyBvLkVycm5vRXJyb3IoNDMpO2lmKG4mMilyZXR1cm4gMDt2YXIgaT14LnNsaWNlKGUsZSt0KTtvLm1zeW5jKHIsaSxhLHQsbil9LGdldFN0cmVhbUZyb21GRChlKXt2YXIgcj1vLmdldFN0cmVhbUNoZWNrZWQoZSk7cmV0dXJuIHJ9LHZhcmFyZ3M6dm9pZCAwLGdldFN0cihlKXt2YXIgcj1zZShlKTtyZXR1cm4gcn19O2Z1bmN0aW9uIGp0KGUscix0LG4pe3RyeXtpZihyPVAuZ2V0U3RyKHIpLHI9UC5jYWxjdWxhdGVBdChlLHIpLHQmLTgpcmV0dXJuLTI4O3ZhciBhPW8ubG9va3VwUGF0aChyLHtmb2xsb3c6ITB9KSxpPWEubm9kZTtpZighaSlyZXR1cm4tNDQ7dmFyIHM9IiI7cmV0dXJuIHQmNCYmKHMrPSJyIiksdCYyJiYocys9InciKSx0JjEmJihzKz0ieCIpLHMmJm8ubm9kZVBlcm1pc3Npb25zKGkscyk/LTI6MH1jYXRjaChsKXtpZih0eXBlb2Ygbz4idSJ8fGwubmFtZSE9PSJFcnJub0Vycm9yIil0aHJvdyBsO3JldHVybi1sLmVycm5vfX1mdW5jdGlvbiBNZSgpe3ZhciBlPWdbK1AudmFyYXJncz4+Ml07cmV0dXJuIFAudmFyYXJncys9NCxlfXZhciBkZT1NZTtmdW5jdGlvbiB6dChlLHIsdCl7UC52YXJhcmdzPXQ7dHJ5e3ZhciBuPVAuZ2V0U3RyZWFtRnJvbUZEKGUpO3N3aXRjaChyKXtjYXNlIDA6e3ZhciBhPU1lKCk7aWYoYTwwKXJldHVybi0yODtmb3IoO28uc3RyZWFtc1thXTspYSsrO3ZhciBpO3JldHVybiBpPW8uZHVwU3RyZWFtKG4sYSksaS5mZH1jYXNlIDE6Y2FzZSAyOnJldHVybiAwO2Nhc2UgMzpyZXR1cm4gbi5mbGFncztjYXNlIDQ6e3ZhciBhPU1lKCk7cmV0dXJuIG4uZmxhZ3N8PWEsMH1jYXNlIDEyOnt2YXIgYT1kZSgpLHM9MDtyZXR1cm4gWVthK3M+PjFdPTIsMH1jYXNlIDEzOmNhc2UgMTQ6cmV0dXJuIDB9cmV0dXJuLTI4fWNhdGNoKGwpe2lmKHR5cGVvZiBvPiJ1Inx8bC5uYW1lIT09IkVycm5vRXJyb3IiKXRocm93IGw7cmV0dXJuLWwuZXJybm99fWZ1bmN0aW9uIHh0KGUscil7dHJ5e3ZhciB0PVAuZ2V0U3RyZWFtRnJvbUZEKGUpO3JldHVybiBQLmRvU3RhdChvLnN0YXQsdC5wYXRoLHIpfWNhdGNoKG4pe2lmKHR5cGVvZiBvPiJ1Inx8bi5uYW1lIT09IkVycm5vRXJyb3IiKXRocm93IG47cmV0dXJuLW4uZXJybm99fXZhciB2ZT0oZSxyLHQpPT5RZShlLHgscix0KTtmdW5jdGlvbiBIdChlLHIsdCl7dHJ5e3ZhciBuPVAuZ2V0U3RyZWFtRnJvbUZEKGUpO24uZ2V0ZGVudHN8fChuLmdldGRlbnRzPW8ucmVhZGRpcihuLnBhdGgpKTtmb3IodmFyIGE9MjgwLGk9MCxzPW8ubGxzZWVrKG4sMCwxKSxsPU1hdGguZmxvb3Iocy9hKTtsPG4uZ2V0ZGVudHMubGVuZ3RoJiZpK2E8PXQ7KXt2YXIgdSxjLGQ9bi5nZXRkZW50c1tsXTtpZihkPT09Ii4iKXU9bi5ub2RlLmlkLGM9NDtlbHNlIGlmKGQ9PT0iLi4iKXt2YXIgbT1vLmxvb2t1cFBhdGgobi5wYXRoLHtwYXJlbnQ6ITB9KTt1PW0ubm9kZS5pZCxjPTR9ZWxzZXt2YXIgaD1vLmxvb2t1cE5vZGUobi5ub2RlLGQpO3U9aC5pZCxjPW8uaXNDaHJkZXYoaC5tb2RlKT8yOm8uaXNEaXIoaC5tb2RlKT80Om8uaXNMaW5rKGgubW9kZSk/MTA6OH0kPVt1Pj4+MCwoeT11LCtNYXRoLmFicyh5KT49MT95PjA/K01hdGguZmxvb3IoeS80Mjk0OTY3Mjk2KT4+PjA6fn4rTWF0aC5jZWlsKCh5LSsofn55Pj4+MCkpLzQyOTQ5NjcyOTYpPj4+MDowKV0sZ1tyK2k+PjJdPSRbMF0sZ1tyK2krND4+Ml09JFsxXSwkPVsobCsxKSphPj4+MCwoeT0obCsxKSphLCtNYXRoLmFicyh5KT49MT95PjA/K01hdGguZmxvb3IoeS80Mjk0OTY3Mjk2KT4+PjA6fn4rTWF0aC5jZWlsKCh5LSsofn55Pj4+MCkpLzQyOTQ5NjcyOTYpPj4+MDowKV0sZ1tyK2krOD4+Ml09JFswXSxnW3IraSsxMj4+Ml09JFsxXSxZW3IraSsxNj4+MV09MjgwLElbcitpKzE4XT1jLHZlKGQscitpKzE5LDI1NiksaSs9YSxsKz0xfXJldHVybiBvLmxsc2VlayhuLGwqYSwwKSxpfWNhdGNoKHApe2lmKHR5cGVvZiBvPiJ1Inx8cC5uYW1lIT09IkVycm5vRXJyb3IiKXRocm93IHA7cmV0dXJuLXAuZXJybm99fWZ1bmN0aW9uIFd0KGUscix0KXtQLnZhcmFyZ3M9dDt0cnl7dmFyIG49UC5nZXRTdHJlYW1Gcm9tRkQoZSk7c3dpdGNoKHIpe2Nhc2UgMjE1MDk6cmV0dXJuIG4udHR5PzA6LTU5O2Nhc2UgMjE1MDU6e2lmKCFuLnR0eSlyZXR1cm4tNTk7aWYobi50dHkub3BzLmlvY3RsX3RjZ2V0cyl7dmFyIGE9bi50dHkub3BzLmlvY3RsX3RjZ2V0cyhuKSxpPWRlKCk7Z1tpPj4yXT1hLmNfaWZsYWd8fDAsZ1tpKzQ+PjJdPWEuY19vZmxhZ3x8MCxnW2krOD4+Ml09YS5jX2NmbGFnfHwwLGdbaSsxMj4+Ml09YS5jX2xmbGFnfHwwO2Zvcih2YXIgcz0wO3M8MzI7cysrKUlbaStzKzE3XT1hLmNfY2Nbc118fDA7cmV0dXJuIDB9cmV0dXJuIDB9Y2FzZSAyMTUxMDpjYXNlIDIxNTExOmNhc2UgMjE1MTI6cmV0dXJuIG4udHR5PzA6LTU5O2Nhc2UgMjE1MDY6Y2FzZSAyMTUwNzpjYXNlIDIxNTA4OntpZighbi50dHkpcmV0dXJuLTU5O2lmKG4udHR5Lm9wcy5pb2N0bF90Y3NldHMpe2Zvcih2YXIgaT1kZSgpLGw9Z1tpPj4yXSx1PWdbaSs0Pj4yXSxjPWdbaSs4Pj4yXSxkPWdbaSsxMj4+Ml0sbT1bXSxzPTA7czwzMjtzKyspbS5wdXNoKElbaStzKzE3XSk7cmV0dXJuIG4udHR5Lm9wcy5pb2N0bF90Y3NldHMobi50dHkscix7Y19pZmxhZzpsLGNfb2ZsYWc6dSxjX2NmbGFnOmMsY19sZmxhZzpkLGNfY2M6bX0pfXJldHVybiAwfWNhc2UgMjE1MTk6e2lmKCFuLnR0eSlyZXR1cm4tNTk7dmFyIGk9ZGUoKTtyZXR1cm4gZ1tpPj4yXT0wLDB9Y2FzZSAyMTUyMDpyZXR1cm4gbi50dHk/LTI4Oi01OTtjYXNlIDIxNTMxOnt2YXIgaT1kZSgpO3JldHVybiBvLmlvY3RsKG4scixpKX1jYXNlIDIxNTIzOntpZighbi50dHkpcmV0dXJuLTU5O2lmKG4udHR5Lm9wcy5pb2N0bF90aW9jZ3dpbnN6KXt2YXIgaD1uLnR0eS5vcHMuaW9jdGxfdGlvY2d3aW5zeihuLnR0eSksaT1kZSgpO1lbaT4+MV09aFswXSxZW2krMj4+MV09aFsxXX1yZXR1cm4gMH1jYXNlIDIxNTI0OnJldHVybiBuLnR0eT8wOi01OTtjYXNlIDIxNTE1OnJldHVybiBuLnR0eT8wOi01OTtkZWZhdWx0OnJldHVybi0yOH19Y2F0Y2gocCl7aWYodHlwZW9mIG8+InUifHxwLm5hbWUhPT0iRXJybm9FcnJvciIpdGhyb3cgcDtyZXR1cm4tcC5lcnJub319ZnVuY3Rpb24gQnQoZSxyKXt0cnl7cmV0dXJuIGU9UC5nZXRTdHIoZSksUC5kb1N0YXQoby5sc3RhdCxlLHIpfWNhdGNoKHQpe2lmKHR5cGVvZiBvPiJ1Inx8dC5uYW1lIT09IkVycm5vRXJyb3IiKXRocm93IHQ7cmV0dXJuLXQuZXJybm99fWZ1bmN0aW9uIE50KGUscix0LG4pe3RyeXtyPVAuZ2V0U3RyKHIpO3ZhciBhPW4mMjU2LGk9biY0MDk2O3JldHVybiBuPW4mLTY0MDEscj1QLmNhbGN1bGF0ZUF0KGUscixpKSxQLmRvU3RhdChhP28ubHN0YXQ6by5zdGF0LHIsdCl9Y2F0Y2gocyl7aWYodHlwZW9mIG8+InUifHxzLm5hbWUhPT0iRXJybm9FcnJvciIpdGhyb3cgcztyZXR1cm4tcy5lcnJub319ZnVuY3Rpb24gWXQoZSxyLHQsbil7UC52YXJhcmdzPW47dHJ5e3I9UC5nZXRTdHIocikscj1QLmNhbGN1bGF0ZUF0KGUscik7dmFyIGE9bj9NZSgpOjA7cmV0dXJuIG8ub3BlbihyLHQsYSkuZmR9Y2F0Y2goaSl7aWYodHlwZW9mIG8+InUifHxpLm5hbWUhPT0iRXJybm9FcnJvciIpdGhyb3cgaTtyZXR1cm4taS5lcnJub319ZnVuY3Rpb24gR3QoZSxyLHQsbil7dHJ5e3JldHVybiByPVAuZ2V0U3RyKHIpLG49UC5nZXRTdHIobikscj1QLmNhbGN1bGF0ZUF0KGUsciksbj1QLmNhbGN1bGF0ZUF0KHQsbiksby5yZW5hbWUocixuKSwwfWNhdGNoKGEpe2lmKHR5cGVvZiBvPiJ1Inx8YS5uYW1lIT09IkVycm5vRXJyb3IiKXRocm93IGE7cmV0dXJuLWEuZXJybm99fWZ1bmN0aW9uIHF0KGUpe3RyeXtyZXR1cm4gZT1QLmdldFN0cihlKSxvLnJtZGlyKGUpLDB9Y2F0Y2gocil7aWYodHlwZW9mIG8+InUifHxyLm5hbWUhPT0iRXJybm9FcnJvciIpdGhyb3cgcjtyZXR1cm4tci5lcnJub319ZnVuY3Rpb24gWHQoZSxyKXt0cnl7cmV0dXJuIGU9UC5nZXRTdHIoZSksUC5kb1N0YXQoby5zdGF0LGUscil9Y2F0Y2godCl7aWYodHlwZW9mIG8+InUifHx0Lm5hbWUhPT0iRXJybm9FcnJvciIpdGhyb3cgdDtyZXR1cm4tdC5lcnJub319ZnVuY3Rpb24gS3QoZSxyLHQpe3RyeXtyZXR1cm4gcj1QLmdldFN0cihyKSxyPVAuY2FsY3VsYXRlQXQoZSxyKSx0PT09MD9vLnVubGluayhyKTp0PT09NTEyP28ucm1kaXIocik6aWUoIkludmFsaWQgZmxhZ3MgcGFzc2VkIHRvIHVubGlua2F0IiksMH1jYXRjaChuKXtpZih0eXBlb2Ygbz4idSJ8fG4ubmFtZSE9PSJFcnJub0Vycm9yIil0aHJvdyBuO3JldHVybi1uLmVycm5vfX12YXIgSnQ9KCk9PntpZSgiIil9LFJlPXt9LHJyPWU9Pntmb3IoO2UubGVuZ3RoOyl7dmFyIHI9ZS5wb3AoKSx0PWUucG9wKCk7dChyKX19O2Z1bmN0aW9uIHllKGUpe3JldHVybiB0aGlzLmZyb21XaXJlVHlwZShBW2U+PjJdKX12YXIgaGU9e30sdWU9e30sT2U9e30sU3IsSWU9ZT0+e3Rocm93IG5ldyBTcihlKX0sTj0oZSxyLHQpPT57ZS5mb3JFYWNoKGZ1bmN0aW9uKGwpe09lW2xdPXJ9KTtmdW5jdGlvbiBuKGwpe3ZhciB1PXQobCk7dS5sZW5ndGghPT1lLmxlbmd0aCYmSWUoIk1pc21hdGNoZWQgdHlwZSBjb252ZXJ0ZXIgY291bnQiKTtmb3IodmFyIGM9MDtjPGUubGVuZ3RoOysrYylLKGVbY10sdVtjXSl9dmFyIGE9bmV3IEFycmF5KHIubGVuZ3RoKSxpPVtdLHM9MDtyLmZvckVhY2goKGwsdSk9Pnt1ZS5oYXNPd25Qcm9wZXJ0eShsKT9hW3VdPXVlW2xdOihpLnB1c2gobCksaGUuaGFzT3duUHJvcGVydHkobCl8fChoZVtsXT1bXSksaGVbbF0ucHVzaCgoKT0+e2FbdV09dWVbbF0sKytzLHM9PT1pLmxlbmd0aCYmbihhKX0pKX0pLGkubGVuZ3RoPT09MCYmbihhKX0sWnQ9ZT0+e3ZhciByPVJlW2VdO2RlbGV0ZSBSZVtlXTt2YXIgdD1yLnJhd0NvbnN0cnVjdG9yLG49ci5yYXdEZXN0cnVjdG9yLGE9ci5maWVsZHMsaT1hLm1hcChzPT5zLmdldHRlclJldHVyblR5cGUpLmNvbmNhdChhLm1hcChzPT5zLnNldHRlckFyZ3VtZW50VHlwZSkpO04oW2VdLGkscz0+e3ZhciBsPXt9O3JldHVybiBhLmZvckVhY2goKHUsYyk9Pnt2YXIgZD11LmZpZWxkTmFtZSxtPXNbY10saD11LmdldHRlcixwPXUuZ2V0dGVyQ29udGV4dCx3PXNbYythLmxlbmd0aF0sRD11LnNldHRlcixNPXUuc2V0dGVyQ29udGV4dDtsW2RdPXtyZWFkOkY9Pm0uZnJvbVdpcmVUeXBlKGgocCxGKSksd3JpdGU6KEYsdik9Pnt2YXIgXz1bXTtEKE0sRix3LnRvV2lyZVR5cGUoXyx2KSkscnIoXyl9fX0pLFt7bmFtZTpyLm5hbWUsZnJvbVdpcmVUeXBlOnU9Pnt2YXIgYz17fTtmb3IodmFyIGQgaW4gbCljW2RdPWxbZF0ucmVhZCh1KTtyZXR1cm4gbih1KSxjfSx0b1dpcmVUeXBlOih1LGMpPT57Zm9yKHZhciBkIGluIGwpaWYoIShkIGluIGMpKXRocm93IG5ldyBUeXBlRXJyb3IoYE1pc3NpbmcgZmllbGQ6ICIke2R9ImApO3ZhciBtPXQoKTtmb3IoZCBpbiBsKWxbZF0ud3JpdGUobSxjW2RdKTtyZXR1cm4gdSE9PW51bGwmJnUucHVzaChuLG0pLG19LGFyZ1BhY2tBZHZhbmNlOkoscmVhZFZhbHVlRnJvbVBvaW50ZXI6eWUsZGVzdHJ1Y3RvckZ1bmN0aW9uOm59XX0pfSxRdD0oZSxyLHQsbixhKT0+e30sZW49KCk9Pntmb3IodmFyIGU9bmV3IEFycmF5KDI1Nikscj0wO3I8MjU2OysrcillW3JdPVN0cmluZy5mcm9tQ2hhckNvZGUocik7TXI9ZX0sTXIsaj1lPT57Zm9yKHZhciByPSIiLHQ9ZTt4W3RdOylyKz1Nclt4W3QrK11dO3JldHVybiByfSxtZSxrPWU9Pnt0aHJvdyBuZXcgbWUoZSl9O2Z1bmN0aW9uIHJuKGUscix0PXt9KXt2YXIgbj1yLm5hbWU7aWYoZXx8ayhgdHlwZSAiJHtufSIgbXVzdCBoYXZlIGEgcG9zaXRpdmUgaW50ZWdlciB0eXBlaWQgcG9pbnRlcmApLHVlLmhhc093blByb3BlcnR5KGUpKXtpZih0Lmlnbm9yZUR1cGxpY2F0ZVJlZ2lzdHJhdGlvbnMpcmV0dXJuO2soYENhbm5vdCByZWdpc3RlciB0eXBlICcke259JyB0d2ljZWApfWlmKHVlW2VdPXIsZGVsZXRlIE9lW2VdLGhlLmhhc093blByb3BlcnR5KGUpKXt2YXIgYT1oZVtlXTtkZWxldGUgaGVbZV0sYS5mb3JFYWNoKGk9PmkoKSl9fWZ1bmN0aW9uIEsoZSxyLHQ9e30pe2lmKCEoImFyZ1BhY2tBZHZhbmNlImluIHIpKXRocm93IG5ldyBUeXBlRXJyb3IoInJlZ2lzdGVyVHlwZSByZWdpc3RlcmVkSW5zdGFuY2UgcmVxdWlyZXMgYXJnUGFja0FkdmFuY2UiKTtyZXR1cm4gcm4oZSxyLHQpfXZhciBKPTgsdG49KGUscix0LG4pPT57cj1qKHIpLEsoZSx7bmFtZTpyLGZyb21XaXJlVHlwZTpmdW5jdGlvbihhKXtyZXR1cm4hIWF9LHRvV2lyZVR5cGU6ZnVuY3Rpb24oYSxpKXtyZXR1cm4gaT90Om59LGFyZ1BhY2tBZHZhbmNlOkoscmVhZFZhbHVlRnJvbVBvaW50ZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZnJvbVdpcmVUeXBlKHhbYV0pfSxkZXN0cnVjdG9yRnVuY3Rpb246bnVsbH0pfSxubj1lPT4oe2NvdW50OmUuY291bnQsZGVsZXRlU2NoZWR1bGVkOmUuZGVsZXRlU2NoZWR1bGVkLHByZXNlcnZlUG9pbnRlck9uRGVsZXRlOmUucHJlc2VydmVQb2ludGVyT25EZWxldGUscHRyOmUucHRyLHB0clR5cGU6ZS5wdHJUeXBlLHNtYXJ0UHRyOmUuc21hcnRQdHIsc21hcnRQdHJUeXBlOmUuc21hcnRQdHJUeXBlfSksdHI9ZT0+e2Z1bmN0aW9uIHIodCl7cmV0dXJuIHQuJCQucHRyVHlwZS5yZWdpc3RlcmVkQ2xhc3MubmFtZX1rKHIoZSkrIiBpbnN0YW5jZSBhbHJlYWR5IGRlbGV0ZWQiKX0sbnI9ITEsUnI9ZT0+e30sYW49ZT0+e2Uuc21hcnRQdHI/ZS5zbWFydFB0clR5cGUucmF3RGVzdHJ1Y3RvcihlLnNtYXJ0UHRyKTplLnB0clR5cGUucmVnaXN0ZXJlZENsYXNzLnJhd0Rlc3RydWN0b3IoZS5wdHIpfSxPcj1lPT57ZS5jb3VudC52YWx1ZS09MTt2YXIgcj1lLmNvdW50LnZhbHVlPT09MDtyJiZhbihlKX0sSXI9KGUscix0KT0+e2lmKHI9PT10KXJldHVybiBlO2lmKHQuYmFzZUNsYXNzPT09dm9pZCAwKXJldHVybiBudWxsO3ZhciBuPUlyKGUscix0LmJhc2VDbGFzcyk7cmV0dXJuIG49PT1udWxsP251bGw6dC5kb3duY2FzdChuKX0sTHI9e30sb249KCk9Pk9iamVjdC5rZXlzKGJlKS5sZW5ndGgsc249KCk9Pnt2YXIgZT1bXTtmb3IodmFyIHIgaW4gYmUpYmUuaGFzT3duUHJvcGVydHkocikmJmUucHVzaChiZVtyXSk7cmV0dXJuIGV9LHdlPVtdLGFyPSgpPT57Zm9yKDt3ZS5sZW5ndGg7KXt2YXIgZT13ZS5wb3AoKTtlLiQkLmRlbGV0ZVNjaGVkdWxlZD0hMSxlLmRlbGV0ZSgpfX0sRWUsbG49ZT0+e0VlPWUsd2UubGVuZ3RoJiZFZSYmRWUoYXIpfSx1bj0oKT0+e2YuZ2V0SW5oZXJpdGVkSW5zdGFuY2VDb3VudD1vbixmLmdldExpdmVJbmhlcml0ZWRJbnN0YW5jZXM9c24sZi5mbHVzaFBlbmRpbmdEZWxldGVzPWFyLGYuc2V0RGVsYXlGdW5jdGlvbj1sbn0sYmU9e30sZm49KGUscik9Pntmb3Iocj09PXZvaWQgMCYmaygicHRyIHNob3VsZCBub3QgYmUgdW5kZWZpbmVkIik7ZS5iYXNlQ2xhc3M7KXI9ZS51cGNhc3QociksZT1lLmJhc2VDbGFzcztyZXR1cm4gcn0sY249KGUscik9PihyPWZuKGUsciksYmVbcl0pLExlPShlLHIpPT57KCFyLnB0clR5cGV8fCFyLnB0cikmJkllKCJtYWtlQ2xhc3NIYW5kbGUgcmVxdWlyZXMgcHRyIGFuZCBwdHJUeXBlIik7dmFyIHQ9ISFyLnNtYXJ0UHRyVHlwZSxuPSEhci5zbWFydFB0cjtyZXR1cm4gdCE9PW4mJkllKCJCb3RoIHNtYXJ0UHRyVHlwZSBhbmQgc21hcnRQdHIgbXVzdCBiZSBzcGVjaWZpZWQiKSxyLmNvdW50PXt2YWx1ZToxfSxrZShPYmplY3QuY3JlYXRlKGUseyQkOnt2YWx1ZTpyLHdyaXRhYmxlOiEwfX0pKX07ZnVuY3Rpb24gZG4oZSl7dmFyIHI9dGhpcy5nZXRQb2ludGVlKGUpO2lmKCFyKXJldHVybiB0aGlzLmRlc3RydWN0b3IoZSksbnVsbDt2YXIgdD1jbih0aGlzLnJlZ2lzdGVyZWRDbGFzcyxyKTtpZih0IT09dm9pZCAwKXtpZih0LiQkLmNvdW50LnZhbHVlPT09MClyZXR1cm4gdC4kJC5wdHI9cix0LiQkLnNtYXJ0UHRyPWUsdC5jbG9uZSgpO3ZhciBuPXQuY2xvbmUoKTtyZXR1cm4gdGhpcy5kZXN0cnVjdG9yKGUpLG59ZnVuY3Rpb24gYSgpe3JldHVybiB0aGlzLmlzU21hcnRQb2ludGVyP0xlKHRoaXMucmVnaXN0ZXJlZENsYXNzLmluc3RhbmNlUHJvdG90eXBlLHtwdHJUeXBlOnRoaXMucG9pbnRlZVR5cGUscHRyOnIsc21hcnRQdHJUeXBlOnRoaXMsc21hcnRQdHI6ZX0pOkxlKHRoaXMucmVnaXN0ZXJlZENsYXNzLmluc3RhbmNlUHJvdG90eXBlLHtwdHJUeXBlOnRoaXMscHRyOmV9KX12YXIgaT10aGlzLnJlZ2lzdGVyZWRDbGFzcy5nZXRBY3R1YWxUeXBlKHIpLHM9THJbaV07aWYoIXMpcmV0dXJuIGEuY2FsbCh0aGlzKTt2YXIgbDt0aGlzLmlzQ29uc3Q/bD1zLmNvbnN0UG9pbnRlclR5cGU6bD1zLnBvaW50ZXJUeXBlO3ZhciB1PUlyKHIsdGhpcy5yZWdpc3RlcmVkQ2xhc3MsbC5yZWdpc3RlcmVkQ2xhc3MpO3JldHVybiB1PT09bnVsbD9hLmNhbGwodGhpcyk6dGhpcy5pc1NtYXJ0UG9pbnRlcj9MZShsLnJlZ2lzdGVyZWRDbGFzcy5pbnN0YW5jZVByb3RvdHlwZSx7cHRyVHlwZTpsLHB0cjp1LHNtYXJ0UHRyVHlwZTp0aGlzLHNtYXJ0UHRyOmV9KTpMZShsLnJlZ2lzdGVyZWRDbGFzcy5pbnN0YW5jZVByb3RvdHlwZSx7cHRyVHlwZTpsLHB0cjp1fSl9dmFyIGtlPWU9PnR5cGVvZiBGaW5hbGl6YXRpb25SZWdpc3RyeT4idSI/KGtlPXI9PnIsZSk6KG5yPW5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeShyPT57T3Ioci4kJCl9KSxrZT1yPT57dmFyIHQ9ci4kJCxuPSEhdC5zbWFydFB0cjtpZihuKXt2YXIgYT17JCQ6dH07bnIucmVnaXN0ZXIocixhLHIpfXJldHVybiByfSxScj1yPT5uci51bnJlZ2lzdGVyKHIpLGtlKGUpKSx2bj0oKT0+e09iamVjdC5hc3NpZ24oVmUucHJvdG90eXBlLHtpc0FsaWFzT2YoZSl7aWYoISh0aGlzIGluc3RhbmNlb2YgVmUpfHwhKGUgaW5zdGFuY2VvZiBWZSkpcmV0dXJuITE7dmFyIHI9dGhpcy4kJC5wdHJUeXBlLnJlZ2lzdGVyZWRDbGFzcyx0PXRoaXMuJCQucHRyO2UuJCQ9ZS4kJDtmb3IodmFyIG49ZS4kJC5wdHJUeXBlLnJlZ2lzdGVyZWRDbGFzcyxhPWUuJCQucHRyO3IuYmFzZUNsYXNzOyl0PXIudXBjYXN0KHQpLHI9ci5iYXNlQ2xhc3M7Zm9yKDtuLmJhc2VDbGFzczspYT1uLnVwY2FzdChhKSxuPW4uYmFzZUNsYXNzO3JldHVybiByPT09biYmdD09PWF9LGNsb25lKCl7aWYodGhpcy4kJC5wdHJ8fHRyKHRoaXMpLHRoaXMuJCQucHJlc2VydmVQb2ludGVyT25EZWxldGUpcmV0dXJuIHRoaXMuJCQuY291bnQudmFsdWUrPTEsdGhpczt2YXIgZT1rZShPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKSx7JCQ6e3ZhbHVlOm5uKHRoaXMuJCQpfX0pKTtyZXR1cm4gZS4kJC5jb3VudC52YWx1ZSs9MSxlLiQkLmRlbGV0ZVNjaGVkdWxlZD0hMSxlfSxkZWxldGUoKXt0aGlzLiQkLnB0cnx8dHIodGhpcyksdGhpcy4kJC5kZWxldGVTY2hlZHVsZWQmJiF0aGlzLiQkLnByZXNlcnZlUG9pbnRlck9uRGVsZXRlJiZrKCJPYmplY3QgYWxyZWFkeSBzY2hlZHVsZWQgZm9yIGRlbGV0aW9uIiksUnIodGhpcyksT3IodGhpcy4kJCksdGhpcy4kJC5wcmVzZXJ2ZVBvaW50ZXJPbkRlbGV0ZXx8KHRoaXMuJCQuc21hcnRQdHI9dm9pZCAwLHRoaXMuJCQucHRyPXZvaWQgMCl9LGlzRGVsZXRlZCgpe3JldHVybiF0aGlzLiQkLnB0cn0sZGVsZXRlTGF0ZXIoKXtyZXR1cm4gdGhpcy4kJC5wdHJ8fHRyKHRoaXMpLHRoaXMuJCQuZGVsZXRlU2NoZWR1bGVkJiYhdGhpcy4kJC5wcmVzZXJ2ZVBvaW50ZXJPbkRlbGV0ZSYmaygiT2JqZWN0IGFscmVhZHkgc2NoZWR1bGVkIGZvciBkZWxldGlvbiIpLHdlLnB1c2godGhpcyksd2UubGVuZ3RoPT09MSYmRWUmJkVlKGFyKSx0aGlzLiQkLmRlbGV0ZVNjaGVkdWxlZD0hMCx0aGlzfX0pfTtmdW5jdGlvbiBWZSgpe312YXIgVWU9KGUscik9Pk9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJuYW1lIix7dmFsdWU6ZX0pLG9yPShlLHIsdCk9PntpZihlW3JdLm92ZXJsb2FkVGFibGU9PT12b2lkIDApe3ZhciBuPWVbcl07ZVtyXT1mdW5jdGlvbiguLi5hKXtyZXR1cm4gZVtyXS5vdmVybG9hZFRhYmxlLmhhc093blByb3BlcnR5KGEubGVuZ3RoKXx8ayhgRnVuY3Rpb24gJyR7dH0nIGNhbGxlZCB3aXRoIGFuIGludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50cyAoJHthLmxlbmd0aH0pIC0gZXhwZWN0cyBvbmUgb2YgKCR7ZVtyXS5vdmVybG9hZFRhYmxlfSkhYCksZVtyXS5vdmVybG9hZFRhYmxlW2EubGVuZ3RoXS5hcHBseSh0aGlzLGEpfSxlW3JdLm92ZXJsb2FkVGFibGU9W10sZVtyXS5vdmVybG9hZFRhYmxlW24uYXJnQ291bnRdPW59fSxWcj0oZSxyLHQpPT57Zi5oYXNPd25Qcm9wZXJ0eShlKT8oKHQ9PT12b2lkIDB8fGZbZV0ub3ZlcmxvYWRUYWJsZSE9PXZvaWQgMCYmZltlXS5vdmVybG9hZFRhYmxlW3RdIT09dm9pZCAwKSYmayhgQ2Fubm90IHJlZ2lzdGVyIHB1YmxpYyBuYW1lICcke2V9JyB0d2ljZWApLG9yKGYsZSxlKSxmLmhhc093blByb3BlcnR5KHQpJiZrKGBDYW5ub3QgcmVnaXN0ZXIgbXVsdGlwbGUgb3ZlcmxvYWRzIG9mIGEgZnVuY3Rpb24gd2l0aCB0aGUgc2FtZSBudW1iZXIgb2YgYXJndW1lbnRzICgke3R9KSFgKSxmW2VdLm92ZXJsb2FkVGFibGVbdF09cik6KGZbZV09cix0IT09dm9pZCAwJiYoZltlXS5udW1Bcmd1bWVudHM9dCkpfSxobj00OCxtbj01Nyxwbj1lPT57aWYoZT09PXZvaWQgMClyZXR1cm4iX3Vua25vd24iO2U9ZS5yZXBsYWNlKC9bXmEtekEtWjAtOV9dL2csIiQiKTt2YXIgcj1lLmNoYXJDb2RlQXQoMCk7cmV0dXJuIHI+PWhuJiZyPD1tbj9gXyR7ZX1gOmV9O2Z1bmN0aW9uIF9uKGUscix0LG4sYSxpLHMsbCl7dGhpcy5uYW1lPWUsdGhpcy5jb25zdHJ1Y3Rvcj1yLHRoaXMuaW5zdGFuY2VQcm90b3R5cGU9dCx0aGlzLnJhd0Rlc3RydWN0b3I9bix0aGlzLmJhc2VDbGFzcz1hLHRoaXMuZ2V0QWN0dWFsVHlwZT1pLHRoaXMudXBjYXN0PXMsdGhpcy5kb3duY2FzdD1sLHRoaXMucHVyZVZpcnR1YWxGdW5jdGlvbnM9W119dmFyIGplPShlLHIsdCk9Pntmb3IoO3IhPT10OylyLnVwY2FzdHx8ayhgRXhwZWN0ZWQgbnVsbCBvciBpbnN0YW5jZSBvZiAke3QubmFtZX0sIGdvdCBhbiBpbnN0YW5jZSBvZiAke3IubmFtZX1gKSxlPXIudXBjYXN0KGUpLHI9ci5iYXNlQ2xhc3M7cmV0dXJuIGV9O2Z1bmN0aW9uIGduKGUscil7aWYocj09PW51bGwpcmV0dXJuIHRoaXMuaXNSZWZlcmVuY2UmJmsoYG51bGwgaXMgbm90IGEgdmFsaWQgJHt0aGlzLm5hbWV9YCksMDtyLiQkfHxrKGBDYW5ub3QgcGFzcyAiJHtscihyKX0iIGFzIGEgJHt0aGlzLm5hbWV9YCksci4kJC5wdHJ8fGsoYENhbm5vdCBwYXNzIGRlbGV0ZWQgb2JqZWN0IGFzIGEgcG9pbnRlciBvZiB0eXBlICR7dGhpcy5uYW1lfWApO3ZhciB0PXIuJCQucHRyVHlwZS5yZWdpc3RlcmVkQ2xhc3Msbj1qZShyLiQkLnB0cix0LHRoaXMucmVnaXN0ZXJlZENsYXNzKTtyZXR1cm4gbn1mdW5jdGlvbiB5bihlLHIpe3ZhciB0O2lmKHI9PT1udWxsKXJldHVybiB0aGlzLmlzUmVmZXJlbmNlJiZrKGBudWxsIGlzIG5vdCBhIHZhbGlkICR7dGhpcy5uYW1lfWApLHRoaXMuaXNTbWFydFBvaW50ZXI/KHQ9dGhpcy5yYXdDb25zdHJ1Y3RvcigpLGUhPT1udWxsJiZlLnB1c2godGhpcy5yYXdEZXN0cnVjdG9yLHQpLHQpOjA7KCFyfHwhci4kJCkmJmsoYENhbm5vdCBwYXNzICIke2xyKHIpfSIgYXMgYSAke3RoaXMubmFtZX1gKSxyLiQkLnB0cnx8ayhgQ2Fubm90IHBhc3MgZGVsZXRlZCBvYmplY3QgYXMgYSBwb2ludGVyIG9mIHR5cGUgJHt0aGlzLm5hbWV9YCksIXRoaXMuaXNDb25zdCYmci4kJC5wdHJUeXBlLmlzQ29uc3QmJmsoYENhbm5vdCBjb252ZXJ0IGFyZ3VtZW50IG9mIHR5cGUgJHtyLiQkLnNtYXJ0UHRyVHlwZT9yLiQkLnNtYXJ0UHRyVHlwZS5uYW1lOnIuJCQucHRyVHlwZS5uYW1lfSB0byBwYXJhbWV0ZXIgdHlwZSAke3RoaXMubmFtZX1gKTt2YXIgbj1yLiQkLnB0clR5cGUucmVnaXN0ZXJlZENsYXNzO2lmKHQ9amUoci4kJC5wdHIsbix0aGlzLnJlZ2lzdGVyZWRDbGFzcyksdGhpcy5pc1NtYXJ0UG9pbnRlcilzd2l0Y2goci4kJC5zbWFydFB0cj09PXZvaWQgMCYmaygiUGFzc2luZyByYXcgcG9pbnRlciB0byBzbWFydCBwb2ludGVyIGlzIGlsbGVnYWwiKSx0aGlzLnNoYXJpbmdQb2xpY3kpe2Nhc2UgMDpyLiQkLnNtYXJ0UHRyVHlwZT09PXRoaXM/dD1yLiQkLnNtYXJ0UHRyOmsoYENhbm5vdCBjb252ZXJ0IGFyZ3VtZW50IG9mIHR5cGUgJHtyLiQkLnNtYXJ0UHRyVHlwZT9yLiQkLnNtYXJ0UHRyVHlwZS5uYW1lOnIuJCQucHRyVHlwZS5uYW1lfSB0byBwYXJhbWV0ZXIgdHlwZSAke3RoaXMubmFtZX1gKTticmVhaztjYXNlIDE6dD1yLiQkLnNtYXJ0UHRyO2JyZWFrO2Nhc2UgMjppZihyLiQkLnNtYXJ0UHRyVHlwZT09PXRoaXMpdD1yLiQkLnNtYXJ0UHRyO2Vsc2V7dmFyIGE9ci5jbG9uZSgpO3Q9dGhpcy5yYXdTaGFyZSh0LHRlLnRvSGFuZGxlKCgpPT5hLmRlbGV0ZSgpKSksZSE9PW51bGwmJmUucHVzaCh0aGlzLnJhd0Rlc3RydWN0b3IsdCl9YnJlYWs7ZGVmYXVsdDprKCJVbnN1cHBvcnRpbmcgc2hhcmluZyBwb2xpY3kiKX1yZXR1cm4gdH1mdW5jdGlvbiB3bihlLHIpe2lmKHI9PT1udWxsKXJldHVybiB0aGlzLmlzUmVmZXJlbmNlJiZrKGBudWxsIGlzIG5vdCBhIHZhbGlkICR7dGhpcy5uYW1lfWApLDA7ci4kJHx8ayhgQ2Fubm90IHBhc3MgIiR7bHIocil9IiBhcyBhICR7dGhpcy5uYW1lfWApLHIuJCQucHRyfHxrKGBDYW5ub3QgcGFzcyBkZWxldGVkIG9iamVjdCBhcyBhIHBvaW50ZXIgb2YgdHlwZSAke3RoaXMubmFtZX1gKSxyLiQkLnB0clR5cGUuaXNDb25zdCYmayhgQ2Fubm90IGNvbnZlcnQgYXJndW1lbnQgb2YgdHlwZSAke3IuJCQucHRyVHlwZS5uYW1lfSB0byBwYXJhbWV0ZXIgdHlwZSAke3RoaXMubmFtZX1gKTt2YXIgdD1yLiQkLnB0clR5cGUucmVnaXN0ZXJlZENsYXNzLG49amUoci4kJC5wdHIsdCx0aGlzLnJlZ2lzdGVyZWRDbGFzcyk7cmV0dXJuIG59dmFyIEVuPSgpPT57T2JqZWN0LmFzc2lnbih6ZS5wcm90b3R5cGUse2dldFBvaW50ZWUoZSl7cmV0dXJuIHRoaXMucmF3R2V0UG9pbnRlZSYmKGU9dGhpcy5yYXdHZXRQb2ludGVlKGUpKSxlfSxkZXN0cnVjdG9yKGUpe3ZhciByOyhyPXRoaXMucmF3RGVzdHJ1Y3Rvcik9PW51bGx8fHIuY2FsbCh0aGlzLGUpfSxhcmdQYWNrQWR2YW5jZTpKLHJlYWRWYWx1ZUZyb21Qb2ludGVyOnllLGZyb21XaXJlVHlwZTpkbn0pfTtmdW5jdGlvbiB6ZShlLHIsdCxuLGEsaSxzLGwsdSxjLGQpe3RoaXMubmFtZT1lLHRoaXMucmVnaXN0ZXJlZENsYXNzPXIsdGhpcy5pc1JlZmVyZW5jZT10LHRoaXMuaXNDb25zdD1uLHRoaXMuaXNTbWFydFBvaW50ZXI9YSx0aGlzLnBvaW50ZWVUeXBlPWksdGhpcy5zaGFyaW5nUG9saWN5PXMsdGhpcy5yYXdHZXRQb2ludGVlPWwsdGhpcy5yYXdDb25zdHJ1Y3Rvcj11LHRoaXMucmF3U2hhcmU9Yyx0aGlzLnJhd0Rlc3RydWN0b3I9ZCwhYSYmci5iYXNlQ2xhc3M9PT12b2lkIDA/bj8odGhpcy50b1dpcmVUeXBlPWduLHRoaXMuZGVzdHJ1Y3RvckZ1bmN0aW9uPW51bGwpOih0aGlzLnRvV2lyZVR5cGU9d24sdGhpcy5kZXN0cnVjdG9yRnVuY3Rpb249bnVsbCk6dGhpcy50b1dpcmVUeXBlPXlufXZhciBVcj0oZSxyLHQpPT57Zi5oYXNPd25Qcm9wZXJ0eShlKXx8SWUoIlJlcGxhY2luZyBub25leGlzdGVudCBwdWJsaWMgc3ltYm9sIiksZltlXS5vdmVybG9hZFRhYmxlIT09dm9pZCAwJiZ0IT09dm9pZCAwP2ZbZV0ub3ZlcmxvYWRUYWJsZVt0XT1yOihmW2VdPXIsZltlXS5hcmdDb3VudD10KX0sYm49KGUscix0KT0+e2U9ZS5yZXBsYWNlKC9wL2csImkiKTt2YXIgbj1mWyJkeW5DYWxsXyIrZV07cmV0dXJuIG4ociwuLi50KX0seGU9W10sanIsenI9ZT0+e3ZhciByPXhlW2VdO3JldHVybiByfHwoZT49eGUubGVuZ3RoJiYoeGUubGVuZ3RoPWUrMSkseGVbZV09cj1qci5nZXQoZSkpLHJ9LGtuPShlLHIsdD1bXSk9PntpZihlLmluY2x1ZGVzKCJqIikpcmV0dXJuIGJuKGUscix0KTt2YXIgbj16cihyKSguLi50KTtyZXR1cm4gbn0sUG49KGUscik9PiguLi50KT0+a24oZSxyLHQpLFc9KGUscik9PntlPWooZSk7ZnVuY3Rpb24gdCgpe3JldHVybiBlLmluY2x1ZGVzKCJqIik/UG4oZSxyKTp6cihyKX12YXIgbj10KCk7cmV0dXJuIHR5cGVvZiBuIT0iZnVuY3Rpb24iJiZrKGB1bmtub3duIGZ1bmN0aW9uIHBvaW50ZXIgd2l0aCBzaWduYXR1cmUgJHtlfTogJHtyfWApLG59LEFuPShlLHIpPT57dmFyIHQ9VWUocixmdW5jdGlvbihuKXt0aGlzLm5hbWU9cix0aGlzLm1lc3NhZ2U9bjt2YXIgYT1uZXcgRXJyb3Iobikuc3RhY2s7YSE9PXZvaWQgMCYmKHRoaXMuc3RhY2s9dGhpcy50b1N0cmluZygpK2AKYCthLnJlcGxhY2UoL15FcnJvcig6W15cbl0qKT9cbi8sIiIpKX0pO3JldHVybiB0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKSx0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj10LHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWVzc2FnZT09PXZvaWQgMD90aGlzLm5hbWU6YCR7dGhpcy5uYW1lfTogJHt0aGlzLm1lc3NhZ2V9YH0sdH0seHIsSHI9ZT0+e3ZhciByPWV0KGUpLHQ9aihyKTtyZXR1cm4gWihyKSx0fSxmZT0oZSxyKT0+e3ZhciB0PVtdLG49e307ZnVuY3Rpb24gYShpKXtpZighbltpXSYmIXVlW2ldKXtpZihPZVtpXSl7T2VbaV0uZm9yRWFjaChhKTtyZXR1cm59dC5wdXNoKGkpLG5baV09ITB9fXRocm93IHIuZm9yRWFjaChhKSxuZXcgeHIoYCR7ZX06IGArdC5tYXAoSHIpLmpvaW4oWyIsICJdKSl9LERuPShlLHIsdCxuLGEsaSxzLGwsdSxjLGQsbSxoKT0+e2Q9aihkKSxpPVcoYSxpKSxsJiYobD1XKHMsbCkpLGMmJihjPVcodSxjKSksaD1XKG0saCk7dmFyIHA9cG4oZCk7VnIocCxmdW5jdGlvbigpe2ZlKGBDYW5ub3QgY29uc3RydWN0ICR7ZH0gZHVlIHRvIHVuYm91bmQgdHlwZXNgLFtuXSl9KSxOKFtlLHIsdF0sbj9bbl06W10sdz0+e3ZhciBPO3c9d1swXTt2YXIgRCxNO24/KEQ9dy5yZWdpc3RlcmVkQ2xhc3MsTT1ELmluc3RhbmNlUHJvdG90eXBlKTpNPVZlLnByb3RvdHlwZTt2YXIgRj1VZShkLGZ1bmN0aW9uKC4uLnZyKXtpZihPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykhPT12KXRocm93IG5ldyBtZSgiVXNlICduZXcnIHRvIGNvbnN0cnVjdCAiK2QpO2lmKF8uY29uc3RydWN0b3JfYm9keT09PXZvaWQgMCl0aHJvdyBuZXcgbWUoZCsiIGhhcyBubyBhY2Nlc3NpYmxlIGNvbnN0cnVjdG9yIik7dmFyIG90PV8uY29uc3RydWN0b3JfYm9keVt2ci5sZW5ndGhdO2lmKG90PT09dm9pZCAwKXRocm93IG5ldyBtZShgVHJpZWQgdG8gaW52b2tlIGN0b3Igb2YgJHtkfSB3aXRoIGludmFsaWQgbnVtYmVyIG9mIHBhcmFtZXRlcnMgKCR7dnIubGVuZ3RofSkgLSBleHBlY3RlZCAoJHtPYmplY3Qua2V5cyhfLmNvbnN0cnVjdG9yX2JvZHkpLnRvU3RyaW5nKCl9KSBwYXJhbWV0ZXJzIGluc3RlYWQhYCk7cmV0dXJuIG90LmFwcGx5KHRoaXMsdnIpfSksdj1PYmplY3QuY3JlYXRlKE0se2NvbnN0cnVjdG9yOnt2YWx1ZTpGfX0pO0YucHJvdG90eXBlPXY7dmFyIF89bmV3IF9uKGQsRix2LGgsRCxpLGwsYyk7Xy5iYXNlQ2xhc3MmJigoTz1fLmJhc2VDbGFzcykuX19kZXJpdmVkQ2xhc3Nlcz8/KE8uX19kZXJpdmVkQ2xhc3Nlcz1bXSksXy5iYXNlQ2xhc3MuX19kZXJpdmVkQ2xhc3Nlcy5wdXNoKF8pKTt2YXIgTD1uZXcgemUoZCxfLCEwLCExLCExKSxUPW5ldyB6ZShkKyIqIixfLCExLCExLCExKSxCPW5ldyB6ZShkKyIgY29uc3QqIixfLCExLCEwLCExKTtyZXR1cm4gTHJbZV09e3BvaW50ZXJUeXBlOlQsY29uc3RQb2ludGVyVHlwZTpCfSxVcihwLEYpLFtMLFQsQl19KX07ZnVuY3Rpb24gV3IoZSl7Zm9yKHZhciByPTE7cjxlLmxlbmd0aDsrK3IpaWYoZVtyXSE9PW51bGwmJmVbcl0uZGVzdHJ1Y3RvckZ1bmN0aW9uPT09dm9pZCAwKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uICRuKGUscil7aWYoIShlIGluc3RhbmNlb2YgRnVuY3Rpb24pKXRocm93IG5ldyBUeXBlRXJyb3IoYG5ld18gY2FsbGVkIHdpdGggY29uc3RydWN0b3IgdHlwZSAke3R5cGVvZiBlfSB3aGljaCBpcyBub3QgYSBmdW5jdGlvbmApO3ZhciB0PVVlKGUubmFtZXx8InVua25vd25GdW5jdGlvbk5hbWUiLGZ1bmN0aW9uKCl7fSk7dC5wcm90b3R5cGU9ZS5wcm90b3R5cGU7dmFyIG49bmV3IHQsYT1lLmFwcGx5KG4scik7cmV0dXJuIGEgaW5zdGFuY2VvZiBPYmplY3Q/YTpufWZ1bmN0aW9uIENuKGUscix0LG4pe2Zvcih2YXIgYT1XcihlKSxpPWUubGVuZ3RoLHM9IiIsbD0iIix1PTA7dTxpLTI7Kyt1KXMrPSh1IT09MD8iLCAiOiIiKSsiYXJnIit1LGwrPSh1IT09MD8iLCAiOiIiKSsiYXJnIit1KyJXaXJlZCI7dmFyIGM9YAogICAgICAgIHJldHVybiBmdW5jdGlvbiAoJHtzfSkgewogICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoICE9PSAke2ktMn0pIHsKICAgICAgICAgIHRocm93QmluZGluZ0Vycm9yKCdmdW5jdGlvbiAnICsgaHVtYW5OYW1lICsgJyBjYWxsZWQgd2l0aCAnICsgYXJndW1lbnRzLmxlbmd0aCArICcgYXJndW1lbnRzLCBleHBlY3RlZCAke2ktMn0nKTsKICAgICAgICB9YDthJiYoYys9YHZhciBkZXN0cnVjdG9ycyA9IFtdOwpgKTt2YXIgZD1hPyJkZXN0cnVjdG9ycyI6Im51bGwiLG09WyJodW1hbk5hbWUiLCJ0aHJvd0JpbmRpbmdFcnJvciIsImludm9rZXIiLCJmbiIsInJ1bkRlc3RydWN0b3JzIiwicmV0VHlwZSIsImNsYXNzUGFyYW0iXTtyJiYoYys9InZhciB0aGlzV2lyZWQgPSBjbGFzc1BhcmFtWyd0b1dpcmVUeXBlJ10oIitkK2AsIHRoaXMpOwpgKTtmb3IodmFyIHU9MDt1PGktMjsrK3UpYys9InZhciBhcmciK3UrIldpcmVkID0gYXJnVHlwZSIrdSsiWyd0b1dpcmVUeXBlJ10oIitkKyIsIGFyZyIrdStgKTsKYCxtLnB1c2goImFyZ1R5cGUiK3UpO2lmKHImJihsPSJ0aGlzV2lyZWQiKyhsLmxlbmd0aD4wPyIsICI6IiIpK2wpLGMrPSh0fHxuPyJ2YXIgcnYgPSAiOiIiKSsiaW52b2tlcihmbiIrKGwubGVuZ3RoPjA/IiwgIjoiIikrbCtgKTsKYCxhKWMrPWBydW5EZXN0cnVjdG9ycyhkZXN0cnVjdG9ycyk7CmA7ZWxzZSBmb3IodmFyIHU9cj8xOjI7dTxlLmxlbmd0aDsrK3Upe3ZhciBoPXU9PT0xPyJ0aGlzV2lyZWQiOiJhcmciKyh1LTIpKyJXaXJlZCI7ZVt1XS5kZXN0cnVjdG9yRnVuY3Rpb24hPT1udWxsJiYoYys9YCR7aH1fZHRvcigke2h9KTsKYCxtLnB1c2goYCR7aH1fZHRvcmApKX1yZXR1cm4gdCYmKGMrPWB2YXIgcmV0ID0gcmV0VHlwZVsnZnJvbVdpcmVUeXBlJ10ocnYpOwpyZXR1cm4gcmV0OwpgKSxjKz1gfQpgLFttLGNdfWZ1bmN0aW9uIEhlKGUscix0LG4sYSxpKXt2YXIgcz1yLmxlbmd0aDtzPDImJmsoImFyZ1R5cGVzIGFycmF5IHNpemUgbWlzbWF0Y2ghIE11c3QgYXQgbGVhc3QgZ2V0IHJldHVybiB2YWx1ZSBhbmQgJ3RoaXMnIHR5cGVzISIpO2Zvcih2YXIgbD1yWzFdIT09bnVsbCYmdCE9PW51bGwsdT1XcihyKSxjPXJbMF0ubmFtZSE9PSJ2b2lkIixkPVtlLGssbixhLHJyLHJbMF0sclsxXV0sbT0wO208cy0yOysrbSlkLnB1c2goclttKzJdKTtpZighdSlmb3IodmFyIG09bD8xOjI7bTxyLmxlbmd0aDsrK20pclttXS5kZXN0cnVjdG9yRnVuY3Rpb24hPT1udWxsJiZkLnB1c2goclttXS5kZXN0cnVjdG9yRnVuY3Rpb24pO2xldFtoLHBdPUNuKHIsbCxjLGkpO2gucHVzaChwKTt2YXIgdz0kbihGdW5jdGlvbixoKSguLi5kKTtyZXR1cm4gVWUoZSx3KX12YXIgV2U9KGUscik9Pntmb3IodmFyIHQ9W10sbj0wO248ZTtuKyspdC5wdXNoKEFbcituKjQ+PjJdKTtyZXR1cm4gdH0saXI9ZT0+e2U9ZS50cmltKCk7Y29uc3Qgcj1lLmluZGV4T2YoIigiKTtyZXR1cm4gciE9PS0xP2Uuc3Vic3RyKDAscik6ZX0sRm49KGUscix0LG4sYSxpLHMsbCk9Pnt2YXIgdT1XZSh0LG4pO3I9aihyKSxyPWlyKHIpLGk9VyhhLGkpLE4oW10sW2VdLGM9PntjPWNbMF07dmFyIGQ9YCR7Yy5uYW1lfS4ke3J9YDtmdW5jdGlvbiBtKCl7ZmUoYENhbm5vdCBjYWxsICR7ZH0gZHVlIHRvIHVuYm91bmQgdHlwZXNgLHUpfXIuc3RhcnRzV2l0aCgiQEAiKSYmKHI9U3ltYm9sW3Iuc3Vic3RyaW5nKDIpXSk7dmFyIGg9Yy5yZWdpc3RlcmVkQ2xhc3MuY29uc3RydWN0b3I7cmV0dXJuIGhbcl09PT12b2lkIDA/KG0uYXJnQ291bnQ9dC0xLGhbcl09bSk6KG9yKGgscixkKSxoW3JdLm92ZXJsb2FkVGFibGVbdC0xXT1tKSxOKFtdLHUscD0+e3ZhciB3PVtwWzBdLG51bGxdLmNvbmNhdChwLnNsaWNlKDEpKSxEPUhlKGQsdyxudWxsLGkscyxsKTtpZihoW3JdLm92ZXJsb2FkVGFibGU9PT12b2lkIDA/KEQuYXJnQ291bnQ9dC0xLGhbcl09RCk6aFtyXS5vdmVybG9hZFRhYmxlW3QtMV09RCxjLnJlZ2lzdGVyZWRDbGFzcy5fX2Rlcml2ZWRDbGFzc2VzKWZvcihjb25zdCBNIG9mIGMucmVnaXN0ZXJlZENsYXNzLl9fZGVyaXZlZENsYXNzZXMpTS5jb25zdHJ1Y3Rvci5oYXNPd25Qcm9wZXJ0eShyKXx8KE0uY29uc3RydWN0b3Jbcl09RCk7cmV0dXJuW119KSxbXX0pfSxUbj0oZSxyLHQsbixhLGkpPT57dmFyIHM9V2Uocix0KTthPVcobixhKSxOKFtdLFtlXSxsPT57bD1sWzBdO3ZhciB1PWBjb25zdHJ1Y3RvciAke2wubmFtZX1gO2lmKGwucmVnaXN0ZXJlZENsYXNzLmNvbnN0cnVjdG9yX2JvZHk9PT12b2lkIDAmJihsLnJlZ2lzdGVyZWRDbGFzcy5jb25zdHJ1Y3Rvcl9ib2R5PVtdKSxsLnJlZ2lzdGVyZWRDbGFzcy5jb25zdHJ1Y3Rvcl9ib2R5W3ItMV0hPT12b2lkIDApdGhyb3cgbmV3IG1lKGBDYW5ub3QgcmVnaXN0ZXIgbXVsdGlwbGUgY29uc3RydWN0b3JzIHdpdGggaWRlbnRpY2FsIG51bWJlciBvZiBwYXJhbWV0ZXJzICgke3ItMX0pIGZvciBjbGFzcyAnJHtsLm5hbWV9JyEgT3ZlcmxvYWQgcmVzb2x1dGlvbiBpcyBjdXJyZW50bHkgb25seSBwZXJmb3JtZWQgdXNpbmcgdGhlIHBhcmFtZXRlciBjb3VudCwgbm90IGFjdHVhbCB0eXBlIGluZm8hYCk7cmV0dXJuIGwucmVnaXN0ZXJlZENsYXNzLmNvbnN0cnVjdG9yX2JvZHlbci0xXT0oKT0+e2ZlKGBDYW5ub3QgY29uc3RydWN0ICR7bC5uYW1lfSBkdWUgdG8gdW5ib3VuZCB0eXBlc2Ascyl9LE4oW10scyxjPT4oYy5zcGxpY2UoMSwwLG51bGwpLGwucmVnaXN0ZXJlZENsYXNzLmNvbnN0cnVjdG9yX2JvZHlbci0xXT1IZSh1LGMsbnVsbCxhLGkpLFtdKSksW119KX0sU249KGUscix0LG4sYSxpLHMsbCx1KT0+e3ZhciBjPVdlKHQsbik7cj1qKHIpLHI9aXIociksaT1XKGEsaSksTihbXSxbZV0sZD0+e2Q9ZFswXTt2YXIgbT1gJHtkLm5hbWV9LiR7cn1gO3Iuc3RhcnRzV2l0aCgiQEAiKSYmKHI9U3ltYm9sW3Iuc3Vic3RyaW5nKDIpXSksbCYmZC5yZWdpc3RlcmVkQ2xhc3MucHVyZVZpcnR1YWxGdW5jdGlvbnMucHVzaChyKTtmdW5jdGlvbiBoKCl7ZmUoYENhbm5vdCBjYWxsICR7bX0gZHVlIHRvIHVuYm91bmQgdHlwZXNgLGMpfXZhciBwPWQucmVnaXN0ZXJlZENsYXNzLmluc3RhbmNlUHJvdG90eXBlLHc9cFtyXTtyZXR1cm4gdz09PXZvaWQgMHx8dy5vdmVybG9hZFRhYmxlPT09dm9pZCAwJiZ3LmNsYXNzTmFtZSE9PWQubmFtZSYmdy5hcmdDb3VudD09PXQtMj8oaC5hcmdDb3VudD10LTIsaC5jbGFzc05hbWU9ZC5uYW1lLHBbcl09aCk6KG9yKHAscixtKSxwW3JdLm92ZXJsb2FkVGFibGVbdC0yXT1oKSxOKFtdLGMsRD0+e3ZhciBNPUhlKG0sRCxkLGkscyx1KTtyZXR1cm4gcFtyXS5vdmVybG9hZFRhYmxlPT09dm9pZCAwPyhNLmFyZ0NvdW50PXQtMixwW3JdPU0pOnBbcl0ub3ZlcmxvYWRUYWJsZVt0LTJdPU0sW119KSxbXX0pfSxCcj0oZSxyLHQpPT4oZSBpbnN0YW5jZW9mIE9iamVjdHx8ayhgJHt0fSB3aXRoIGludmFsaWQgInRoaXMiOiAke2V9YCksZSBpbnN0YW5jZW9mIHIucmVnaXN0ZXJlZENsYXNzLmNvbnN0cnVjdG9yfHxrKGAke3R9IGluY29tcGF0aWJsZSB3aXRoICJ0aGlzIiBvZiB0eXBlICR7ZS5jb25zdHJ1Y3Rvci5uYW1lfWApLGUuJCQucHRyfHxrKGBjYW5ub3QgY2FsbCBlbXNjcmlwdGVuIGJpbmRpbmcgbWV0aG9kICR7dH0gb24gZGVsZXRlZCBvYmplY3RgKSxqZShlLiQkLnB0cixlLiQkLnB0clR5cGUucmVnaXN0ZXJlZENsYXNzLHIucmVnaXN0ZXJlZENsYXNzKSksTW49KGUscix0LG4sYSxpLHMsbCx1LGMpPT57cj1qKHIpLGE9VyhuLGEpLE4oW10sW2VdLGQ9PntkPWRbMF07dmFyIG09YCR7ZC5uYW1lfS4ke3J9YCxoPXtnZXQoKXtmZShgQ2Fubm90IGFjY2VzcyAke219IGR1ZSB0byB1bmJvdW5kIHR5cGVzYCxbdCxzXSl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfTtyZXR1cm4gdT9oLnNldD0oKT0+ZmUoYENhbm5vdCBhY2Nlc3MgJHttfSBkdWUgdG8gdW5ib3VuZCB0eXBlc2AsW3Qsc10pOmguc2V0PXA9PmsobSsiIGlzIGEgcmVhZC1vbmx5IHByb3BlcnR5IiksT2JqZWN0LmRlZmluZVByb3BlcnR5KGQucmVnaXN0ZXJlZENsYXNzLmluc3RhbmNlUHJvdG90eXBlLHIsaCksTihbXSx1P1t0LHNdOlt0XSxwPT57dmFyIHc9cFswXSxEPXtnZXQoKXt2YXIgRj1Ccih0aGlzLGQsbSsiIGdldHRlciIpO3JldHVybiB3LmZyb21XaXJlVHlwZShhKGksRikpfSxlbnVtZXJhYmxlOiEwfTtpZih1KXt1PVcobCx1KTt2YXIgTT1wWzFdO0Quc2V0PWZ1bmN0aW9uKEYpe3ZhciB2PUJyKHRoaXMsZCxtKyIgc2V0dGVyIiksXz1bXTt1KGMsdixNLnRvV2lyZVR5cGUoXyxGKSkscnIoXyl9fXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZC5yZWdpc3RlcmVkQ2xhc3MuaW5zdGFuY2VQcm90b3R5cGUscixEKSxbXX0pLFtdfSl9LHNyPVtdLHJlPVtdLE5yPWU9PntlPjkmJi0tcmVbZSsxXT09PTAmJihyZVtlXT12b2lkIDAsc3IucHVzaChlKSl9LFJuPSgpPT5yZS5sZW5ndGgvMi01LXNyLmxlbmd0aCxPbj0oKT0+e3JlLnB1c2goMCwxLHZvaWQgMCwxLG51bGwsMSwhMCwxLCExLDEpLGYuY291bnRfZW12YWxfaGFuZGxlcz1Sbn0sdGU9e3RvVmFsdWU6ZT0+KGV8fGsoIkNhbm5vdCB1c2UgZGVsZXRlZCB2YWwuIGhhbmRsZSA9ICIrZSkscmVbZV0pLHRvSGFuZGxlOmU9Pntzd2l0Y2goZSl7Y2FzZSB2b2lkIDA6cmV0dXJuIDI7Y2FzZSBudWxsOnJldHVybiA0O2Nhc2UhMDpyZXR1cm4gNjtjYXNlITE6cmV0dXJuIDg7ZGVmYXVsdDp7Y29uc3Qgcj1zci5wb3AoKXx8cmUubGVuZ3RoO3JldHVybiByZVtyXT1lLHJlW3IrMV09MSxyfX19fSxJbj17bmFtZToiZW1zY3JpcHRlbjo6dmFsIixmcm9tV2lyZVR5cGU6ZT0+e3ZhciByPXRlLnRvVmFsdWUoZSk7cmV0dXJuIE5yKGUpLHJ9LHRvV2lyZVR5cGU6KGUscik9PnRlLnRvSGFuZGxlKHIpLGFyZ1BhY2tBZHZhbmNlOkoscmVhZFZhbHVlRnJvbVBvaW50ZXI6eWUsZGVzdHJ1Y3RvckZ1bmN0aW9uOm51bGx9LFlyPWU9PksoZSxJbiksbHI9ZT0+e2lmKGU9PT1udWxsKXJldHVybiJudWxsIjt2YXIgcj10eXBlb2YgZTtyZXR1cm4gcj09PSJvYmplY3QifHxyPT09ImFycmF5Inx8cj09PSJmdW5jdGlvbiI/ZS50b1N0cmluZygpOiIiK2V9LExuPShlLHIpPT57c3dpdGNoKHIpe2Nhc2UgNDpyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZnJvbVdpcmVUeXBlKGdyW3Q+PjJdKX07Y2FzZSA4OnJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5mcm9tV2lyZVR5cGUoeXJbdD4+M10pfTtkZWZhdWx0OnRocm93IG5ldyBUeXBlRXJyb3IoYGludmFsaWQgZmxvYXQgd2lkdGggKCR7cn0pOiAke2V9YCl9fSxWbj0oZSxyLHQpPT57cj1qKHIpLEsoZSx7bmFtZTpyLGZyb21XaXJlVHlwZTpuPT5uLHRvV2lyZVR5cGU6KG4sYSk9PmEsYXJnUGFja0FkdmFuY2U6SixyZWFkVmFsdWVGcm9tUG9pbnRlcjpMbihyLHQpLGRlc3RydWN0b3JGdW5jdGlvbjpudWxsfSl9LFVuPShlLHIsdCxuLGEsaSxzKT0+e3ZhciBsPVdlKHIsdCk7ZT1qKGUpLGU9aXIoZSksYT1XKG4sYSksVnIoZSxmdW5jdGlvbigpe2ZlKGBDYW5ub3QgY2FsbCAke2V9IGR1ZSB0byB1bmJvdW5kIHR5cGVzYCxsKX0sci0xKSxOKFtdLGwsdT0+e3ZhciBjPVt1WzBdLG51bGxdLmNvbmNhdCh1LnNsaWNlKDEpKTtyZXR1cm4gVXIoZSxIZShlLGMsbnVsbCxhLGkscyksci0xKSxbXX0pfSxqbj0oZSxyLHQpPT57c3dpdGNoKHIpe2Nhc2UgMTpyZXR1cm4gdD9uPT5JW25dOm49Pnhbbl07Y2FzZSAyOnJldHVybiB0P249Pllbbj4+MV06bj0+Q2Vbbj4+MV07Y2FzZSA0OnJldHVybiB0P249Pmdbbj4+Ml06bj0+QVtuPj4yXTtkZWZhdWx0OnRocm93IG5ldyBUeXBlRXJyb3IoYGludmFsaWQgaW50ZWdlciB3aWR0aCAoJHtyfSk6ICR7ZX1gKX19LHpuPShlLHIsdCxuLGEpPT57cj1qKHIpO3ZhciBpPWQ9PmQ7aWYobj09PTApe3ZhciBzPTMyLTgqdDtpPWQ9PmQ8PHM+Pj5zfXZhciBsPXIuaW5jbHVkZXMoInVuc2lnbmVkIiksdT0oZCxtKT0+e30sYztsP2M9ZnVuY3Rpb24oZCxtKXtyZXR1cm4gdShtLHRoaXMubmFtZSksbT4+PjB9OmM9ZnVuY3Rpb24oZCxtKXtyZXR1cm4gdShtLHRoaXMubmFtZSksbX0sSyhlLHtuYW1lOnIsZnJvbVdpcmVUeXBlOmksdG9XaXJlVHlwZTpjLGFyZ1BhY2tBZHZhbmNlOkoscmVhZFZhbHVlRnJvbVBvaW50ZXI6am4ocix0LG4hPT0wKSxkZXN0cnVjdG9yRnVuY3Rpb246bnVsbH0pfSx4bj0oZSxyLHQpPT57dmFyIG49W0ludDhBcnJheSxVaW50OEFycmF5LEludDE2QXJyYXksVWludDE2QXJyYXksSW50MzJBcnJheSxVaW50MzJBcnJheSxGbG9hdDMyQXJyYXksRmxvYXQ2NEFycmF5XSxhPW5bcl07ZnVuY3Rpb24gaShzKXt2YXIgbD1BW3M+PjJdLHU9QVtzKzQ+PjJdO3JldHVybiBuZXcgYShJLmJ1ZmZlcix1LGwpfXQ9aih0KSxLKGUse25hbWU6dCxmcm9tV2lyZVR5cGU6aSxhcmdQYWNrQWR2YW5jZTpKLHJlYWRWYWx1ZUZyb21Qb2ludGVyOml9LHtpZ25vcmVEdXBsaWNhdGVSZWdpc3RyYXRpb25zOiEwfSl9LEhuPShlLHIpPT57WXIoZSl9LFduPShlLHIpPT57cj1qKHIpO3ZhciB0PXI9PT0ic3RkOjpzdHJpbmciO0soZSx7bmFtZTpyLGZyb21XaXJlVHlwZShuKXt2YXIgYT1BW24+PjJdLGk9bis0LHM7aWYodClmb3IodmFyIGw9aSx1PTA7dTw9YTsrK3Upe3ZhciBjPWkrdTtpZih1PT1hfHx4W2NdPT0wKXt2YXIgZD1jLWwsbT1zZShsLGQpO3M9PT12b2lkIDA/cz1tOihzKz0iXDAiLHMrPW0pLGw9YysxfX1lbHNle2Zvcih2YXIgaD1uZXcgQXJyYXkoYSksdT0wO3U8YTsrK3UpaFt1XT1TdHJpbmcuZnJvbUNoYXJDb2RlKHhbaSt1XSk7cz1oLmpvaW4oIiIpfXJldHVybiBaKG4pLHN9LHRvV2lyZVR5cGUobixhKXthIGluc3RhbmNlb2YgQXJyYXlCdWZmZXImJihhPW5ldyBVaW50OEFycmF5KGEpKTt2YXIgaSxzPXR5cGVvZiBhPT0ic3RyaW5nIjtzfHxhIGluc3RhbmNlb2YgVWludDhBcnJheXx8YSBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5fHxhIGluc3RhbmNlb2YgSW50OEFycmF5fHxrKCJDYW5ub3QgcGFzcyBub24tc3RyaW5nIHRvIHN0ZDo6c3RyaW5nIiksdCYmcz9pPVplKGEpOmk9YS5sZW5ndGg7dmFyIGw9ZnIoNCtpKzEpLHU9bCs0O2lmKEFbbD4+Ml09aSx0JiZzKXZlKGEsdSxpKzEpO2Vsc2UgaWYocylmb3IodmFyIGM9MDtjPGk7KytjKXt2YXIgZD1hLmNoYXJDb2RlQXQoYyk7ZD4yNTUmJihaKHUpLGsoIlN0cmluZyBoYXMgVVRGLTE2IGNvZGUgdW5pdHMgdGhhdCBkbyBub3QgZml0IGluIDggYml0cyIpKSx4W3UrY109ZH1lbHNlIGZvcih2YXIgYz0wO2M8aTsrK2MpeFt1K2NdPWFbY107cmV0dXJuIG4hPT1udWxsJiZuLnB1c2goWixsKSxsfSxhcmdQYWNrQWR2YW5jZTpKLHJlYWRWYWx1ZUZyb21Qb2ludGVyOnllLGRlc3RydWN0b3JGdW5jdGlvbihuKXtaKG4pfX0pfSxHcj10eXBlb2YgVGV4dERlY29kZXI8InUiP25ldyBUZXh0RGVjb2RlcigidXRmLTE2bGUiKTp2b2lkIDAsQm49KGUscik9Pntmb3IodmFyIHQ9ZSxuPXQ+PjEsYT1uK3IvMjshKG4+PWEpJiZDZVtuXTspKytuO2lmKHQ9bjw8MSx0LWU+MzImJkdyKXJldHVybiBHci5kZWNvZGUoeC5zdWJhcnJheShlLHQpKTtmb3IodmFyIGk9IiIscz0wOyEocz49ci8yKTsrK3Mpe3ZhciBsPVlbZStzKjI+PjFdO2lmKGw9PTApYnJlYWs7aSs9U3RyaW5nLmZyb21DaGFyQ29kZShsKX1yZXR1cm4gaX0sTm49KGUscix0KT0+e2lmKHQ/Pyh0PTIxNDc0ODM2NDcpLHQ8MilyZXR1cm4gMDt0LT0yO2Zvcih2YXIgbj1yLGE9dDxlLmxlbmd0aCoyP3QvMjplLmxlbmd0aCxpPTA7aTxhOysraSl7dmFyIHM9ZS5jaGFyQ29kZUF0KGkpO1lbcj4+MV09cyxyKz0yfXJldHVybiBZW3I+PjFdPTAsci1ufSxZbj1lPT5lLmxlbmd0aCoyLEduPShlLHIpPT57Zm9yKHZhciB0PTAsbj0iIjshKHQ+PXIvNCk7KXt2YXIgYT1nW2UrdCo0Pj4yXTtpZihhPT0wKWJyZWFrO2lmKCsrdCxhPj02NTUzNil7dmFyIGk9YS02NTUzNjtuKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1Mjk2fGk+PjEwLDU2MzIwfGkmMTAyMyl9ZWxzZSBuKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGEpfXJldHVybiBufSxxbj0oZSxyLHQpPT57aWYodD8/KHQ9MjE0NzQ4MzY0NyksdDw0KXJldHVybiAwO2Zvcih2YXIgbj1yLGE9bit0LTQsaT0wO2k8ZS5sZW5ndGg7KytpKXt2YXIgcz1lLmNoYXJDb2RlQXQoaSk7aWYocz49NTUyOTYmJnM8PTU3MzQzKXt2YXIgbD1lLmNoYXJDb2RlQXQoKytpKTtzPTY1NTM2KygocyYxMDIzKTw8MTApfGwmMTAyM31pZihnW3I+PjJdPXMscis9NCxyKzQ+YSlicmVha31yZXR1cm4gZ1tyPj4yXT0wLHItbn0sWG49ZT0+e2Zvcih2YXIgcj0wLHQ9MDt0PGUubGVuZ3RoOysrdCl7dmFyIG49ZS5jaGFyQ29kZUF0KHQpO24+PTU1Mjk2JiZuPD01NzM0MyYmKyt0LHIrPTR9cmV0dXJuIHJ9LEtuPShlLHIsdCk9Pnt0PWoodCk7dmFyIG4sYSxpLHM7cj09PTI/KG49Qm4sYT1ObixzPVluLGk9bD0+Q2VbbD4+MV0pOnI9PT00JiYobj1HbixhPXFuLHM9WG4saT1sPT5BW2w+PjJdKSxLKGUse25hbWU6dCxmcm9tV2lyZVR5cGU6bD0+e2Zvcih2YXIgdT1BW2w+PjJdLGMsZD1sKzQsbT0wO208PXU7KyttKXt2YXIgaD1sKzQrbSpyO2lmKG09PXV8fGkoaCk9PTApe3ZhciBwPWgtZCx3PW4oZCxwKTtjPT09dm9pZCAwP2M9dzooYys9IlwwIixjKz13KSxkPWgrcn19cmV0dXJuIFoobCksY30sdG9XaXJlVHlwZToobCx1KT0+e3R5cGVvZiB1IT0ic3RyaW5nIiYmayhgQ2Fubm90IHBhc3Mgbm9uLXN0cmluZyB0byBDKysgc3RyaW5nIHR5cGUgJHt0fWApO3ZhciBjPXModSksZD1mcig0K2Mrcik7cmV0dXJuIEFbZD4+Ml09Yy9yLGEodSxkKzQsYytyKSxsIT09bnVsbCYmbC5wdXNoKFosZCksZH0sYXJnUGFja0FkdmFuY2U6SixyZWFkVmFsdWVGcm9tUG9pbnRlcjp5ZSxkZXN0cnVjdG9yRnVuY3Rpb24obCl7WihsKX19KX0sSm49KGUscix0LG4sYSxpKT0+e1JlW2VdPXtuYW1lOmoocikscmF3Q29uc3RydWN0b3I6Vyh0LG4pLHJhd0Rlc3RydWN0b3I6VyhhLGkpLGZpZWxkczpbXX19LFpuPShlLHIsdCxuLGEsaSxzLGwsdSxjKT0+e1JlW2VdLmZpZWxkcy5wdXNoKHtmaWVsZE5hbWU6aihyKSxnZXR0ZXJSZXR1cm5UeXBlOnQsZ2V0dGVyOlcobixhKSxnZXR0ZXJDb250ZXh0Omksc2V0dGVyQXJndW1lbnRUeXBlOnMsc2V0dGVyOlcobCx1KSxzZXR0ZXJDb250ZXh0OmN9KX0sUW49KGUscik9PntyPWoociksSyhlLHtpc1ZvaWQ6ITAsbmFtZTpyLGFyZ1BhY2tBZHZhbmNlOjAsZnJvbVdpcmVUeXBlOigpPT57fSx0b1dpcmVUeXBlOih0LG4pPT57fX0pfSxlYT0xLHJhPSgpPT5lYSx0YT0oZSxyLHQpPT54LmNvcHlXaXRoaW4oZSxyLHIrdCksbmE9KCk9PnRlLnRvSGFuZGxlKHt9KSxhYT0oZSxyLHQpPT57ZT10ZS50b1ZhbHVlKGUpLHI9dGUudG9WYWx1ZShyKSx0PXRlLnRvVmFsdWUodCksZVtyXT10fSxvYT0oZSxyKT0+e3ZhciB0PXVlW2VdO3JldHVybiB0PT09dm9pZCAwJiZrKGAke3J9IGhhcyB1bmtub3duIHR5cGUgJHtIcihlKX1gKSx0fSxpYT0oZSxyKT0+e2U9b2EoZSwiX2VtdmFsX3Rha2VfdmFsdWUiKTt2YXIgdD1lLnJlYWRWYWx1ZUZyb21Qb2ludGVyKHIpO3JldHVybiB0ZS50b0hhbmRsZSh0KX0scXI9KGUscik9PnIrMjA5NzE1Mj4+PjA8NDE5NDMwNS0hIWU/KGU+Pj4wKStyKjQyOTQ5NjcyOTY6TmFOO2Z1bmN0aW9uIHNhKGUscix0KXt2YXIgbj1xcihlLHIpLGE9bmV3IERhdGUobioxZTMpO2dbdD4+Ml09YS5nZXRVVENTZWNvbmRzKCksZ1t0KzQ+PjJdPWEuZ2V0VVRDTWludXRlcygpLGdbdCs4Pj4yXT1hLmdldFVUQ0hvdXJzKCksZ1t0KzEyPj4yXT1hLmdldFVUQ0RhdGUoKSxnW3QrMTY+PjJdPWEuZ2V0VVRDTW9udGgoKSxnW3QrMjA+PjJdPWEuZ2V0VVRDRnVsbFllYXIoKS0xOTAwLGdbdCsyND4+Ml09YS5nZXRVVENEYXkoKTt2YXIgaT1EYXRlLlVUQyhhLmdldFVUQ0Z1bGxZZWFyKCksMCwxLDAsMCwwLDApLHM9KGEuZ2V0VGltZSgpLWkpLygxZTMqNjAqNjAqMjQpfDA7Z1t0KzI4Pj4yXT1zfXZhciBCZT1lPT5lJTQ9PT0wJiYoZSUxMDAhPT0wfHxlJTQwMD09PTApLGxhPShlLHIsdCxuKT0+e3ZhciBhPW5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKSxpPW5ldyBEYXRlKGEsMCwxKSxzPW5ldyBEYXRlKGEsNiwxKSxsPWkuZ2V0VGltZXpvbmVPZmZzZXQoKSx1PXMuZ2V0VGltZXpvbmVPZmZzZXQoKSxjPU1hdGgubWF4KGwsdSk7QVtlPj4yXT1jKjYwLGdbcj4+Ml09KyhsIT11KTt2YXIgZD1wPT5wLnRvTG9jYWxlVGltZVN0cmluZyh2b2lkIDAse2hvdXIxMjohMSx0aW1lWm9uZU5hbWU6InNob3J0In0pLnNwbGl0KCIgIilbMV0sbT1kKGkpLGg9ZChzKTt1PGw/KHZlKG0sdCwxNyksdmUoaCxuLDE3KSk6KHZlKG0sbiwxNyksdmUoaCx0LDE3KSl9LHVhPSgpPT5EYXRlLm5vdygpLFhyPSgpPT4yMTQ3NDgzNjQ4LGZhPSgpPT5YcigpLEtyO0tyPSgpPT5wZXJmb3JtYW5jZS5ub3coKTt2YXIgY2E9ZT0+e3ZhciByPSRlLmJ1ZmZlcix0PShlLXIuYnl0ZUxlbmd0aCs2NTUzNSkvNjU1MzY7dHJ5e3JldHVybiAkZS5ncm93KHQpLHdyKCksMX1jYXRjaHt9fSxkYT1lPT57dmFyIHI9eC5sZW5ndGg7ZT4+Pj0wO3ZhciB0PVhyKCk7aWYoZT50KXJldHVybiExO2Zvcih2YXIgbj0odSxjKT0+dSsoYy11JWMpJWMsYT0xO2E8PTQ7YSo9Mil7dmFyIGk9ciooMSsuMi9hKTtpPU1hdGgubWluKGksZSsxMDA2NjMyOTYpO3ZhciBzPU1hdGgubWluKHQsbihNYXRoLm1heChlLGkpLDY1NTM2KSksbD1jYShzKTtpZihsKXJldHVybiEwfXJldHVybiExfSx1cj17fSx2YT0oKT0+aHJ8fCIuL3RoaXMucHJvZ3JhbSIsUGU9KCk9PntpZighUGUuc3RyaW5ncyl7dmFyIGU9KHR5cGVvZiBuYXZpZ2F0b3I9PSJvYmplY3QiJiZuYXZpZ2F0b3IubGFuZ3VhZ2VzJiZuYXZpZ2F0b3IubGFuZ3VhZ2VzWzBdfHwiQyIpLnJlcGxhY2UoIi0iLCJfIikrIi5VVEYtOCIscj17VVNFUjoid2ViX3VzZXIiLExPR05BTUU6IndlYl91c2VyIixQQVRIOiIvIixQV0Q6Ii8iLEhPTUU6Ii9ob21lL3dlYl91c2VyIixMQU5HOmUsXzp2YSgpfTtmb3IodmFyIHQgaW4gdXIpdXJbdF09PT12b2lkIDA/ZGVsZXRlIHJbdF06clt0XT11clt0XTt2YXIgbj1bXTtmb3IodmFyIHQgaW4gciluLnB1c2goYCR7dH09JHtyW3RdfWApO1BlLnN0cmluZ3M9bn1yZXR1cm4gUGUuc3RyaW5nc30saGE9KGUscik9Pntmb3IodmFyIHQ9MDt0PGUubGVuZ3RoOysrdClJW3IrK109ZS5jaGFyQ29kZUF0KHQpO0lbcl09MH0sbWE9KGUscik9Pnt2YXIgdD0wO3JldHVybiBQZSgpLmZvckVhY2goKG4sYSk9Pnt2YXIgaT1yK3Q7QVtlK2EqND4+Ml09aSxoYShuLGkpLHQrPW4ubGVuZ3RoKzF9KSwwfSxwYT0oZSxyKT0+e3ZhciB0PVBlKCk7QVtlPj4yXT10Lmxlbmd0aDt2YXIgbj0wO3JldHVybiB0LmZvckVhY2goYT0+bis9YS5sZW5ndGgrMSksQVtyPj4yXT1uLDB9O2Z1bmN0aW9uIF9hKGUpe3RyeXt2YXIgcj1QLmdldFN0cmVhbUZyb21GRChlKTtyZXR1cm4gby5jbG9zZShyKSwwfWNhdGNoKHQpe2lmKHR5cGVvZiBvPiJ1Inx8dC5uYW1lIT09IkVycm5vRXJyb3IiKXRocm93IHQ7cmV0dXJuIHQuZXJybm99fWZ1bmN0aW9uIGdhKGUscil7dHJ5e3ZhciB0PTAsbj0wLGE9MCxpPVAuZ2V0U3RyZWFtRnJvbUZEKGUpLHM9aS50dHk/MjpvLmlzRGlyKGkubW9kZSk/MzpvLmlzTGluayhpLm1vZGUpPzc6NDtyZXR1cm4gSVtyXT1zLFlbcisyPj4xXT1hLCQ9W3Q+Pj4wLCh5PXQsK01hdGguYWJzKHkpPj0xP3k+MD8rTWF0aC5mbG9vcih5LzQyOTQ5NjcyOTYpPj4+MDp+fitNYXRoLmNlaWwoKHktKyh+fnk+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxnW3IrOD4+Ml09JFswXSxnW3IrMTI+PjJdPSRbMV0sJD1bbj4+PjAsKHk9biwrTWF0aC5hYnMoeSk+PTE/eT4wPytNYXRoLmZsb29yKHkvNDI5NDk2NzI5Nik+Pj4wOn5+K01hdGguY2VpbCgoeS0rKH5+eT4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCldLGdbcisxNj4+Ml09JFswXSxnW3IrMjA+PjJdPSRbMV0sMH1jYXRjaChsKXtpZih0eXBlb2Ygbz4idSJ8fGwubmFtZSE9PSJFcnJub0Vycm9yIil0aHJvdyBsO3JldHVybiBsLmVycm5vfX12YXIgeWE9KGUscix0LG4pPT57Zm9yKHZhciBhPTAsaT0wO2k8dDtpKyspe3ZhciBzPUFbcj4+Ml0sbD1BW3IrND4+Ml07cis9ODt2YXIgdT1vLnJlYWQoZSxJLHMsbCxuKTtpZih1PDApcmV0dXJuLTE7aWYoYSs9dSx1PGwpYnJlYWt9cmV0dXJuIGF9O2Z1bmN0aW9uIHdhKGUscix0LG4pe3RyeXt2YXIgYT1QLmdldFN0cmVhbUZyb21GRChlKSxpPXlhKGEscix0KTtyZXR1cm4gQVtuPj4yXT1pLDB9Y2F0Y2gocyl7aWYodHlwZW9mIG8+InUifHxzLm5hbWUhPT0iRXJybm9FcnJvciIpdGhyb3cgcztyZXR1cm4gcy5lcnJub319ZnVuY3Rpb24gRWEoZSxyLHQsbixhKXt2YXIgaT1xcihyLHQpO3RyeXtpZihpc05hTihpKSlyZXR1cm4gNjE7dmFyIHM9UC5nZXRTdHJlYW1Gcm9tRkQoZSk7cmV0dXJuIG8ubGxzZWVrKHMsaSxuKSwkPVtzLnBvc2l0aW9uPj4+MCwoeT1zLnBvc2l0aW9uLCtNYXRoLmFicyh5KT49MT95PjA/K01hdGguZmxvb3IoeS80Mjk0OTY3Mjk2KT4+PjA6fn4rTWF0aC5jZWlsKCh5LSsofn55Pj4+MCkpLzQyOTQ5NjcyOTYpPj4+MDowKV0sZ1thPj4yXT0kWzBdLGdbYSs0Pj4yXT0kWzFdLHMuZ2V0ZGVudHMmJmk9PT0wJiZuPT09MCYmKHMuZ2V0ZGVudHM9bnVsbCksMH1jYXRjaChsKXtpZih0eXBlb2Ygbz4idSJ8fGwubmFtZSE9PSJFcnJub0Vycm9yIil0aHJvdyBsO3JldHVybiBsLmVycm5vfX12YXIgYmE9KGUscix0LG4pPT57Zm9yKHZhciBhPTAsaT0wO2k8dDtpKyspe3ZhciBzPUFbcj4+Ml0sbD1BW3IrND4+Ml07cis9ODt2YXIgdT1vLndyaXRlKGUsSSxzLGwsbik7aWYodTwwKXJldHVybi0xO2ErPXV9cmV0dXJuIGF9O2Z1bmN0aW9uIGthKGUscix0LG4pe3RyeXt2YXIgYT1QLmdldFN0cmVhbUZyb21GRChlKSxpPWJhKGEscix0KTtyZXR1cm4gQVtuPj4yXT1pLDB9Y2F0Y2gocyl7aWYodHlwZW9mIG8+InUifHxzLm5hbWUhPT0iRXJybm9FcnJvciIpdGhyb3cgcztyZXR1cm4gcy5lcnJub319dmFyIFBhPShlLHIpPT57Zm9yKHZhciB0PTAsbj0wO248PXI7dCs9ZVtuKytdKTtyZXR1cm4gdH0sSnI9WzMxLDI5LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXSxacj1bMzEsMjgsMzEsMzAsMzEsMzAsMzEsMzEsMzAsMzEsMzAsMzFdLEFhPShlLHIpPT57Zm9yKHZhciB0PW5ldyBEYXRlKGUuZ2V0VGltZSgpKTtyPjA7KXt2YXIgbj1CZSh0LmdldEZ1bGxZZWFyKCkpLGE9dC5nZXRNb250aCgpLGk9KG4/SnI6WnIpW2FdO2lmKHI+aS10LmdldERhdGUoKSlyLT1pLXQuZ2V0RGF0ZSgpKzEsdC5zZXREYXRlKDEpLGE8MTE/dC5zZXRNb250aChhKzEpOih0LnNldE1vbnRoKDApLHQuc2V0RnVsbFllYXIodC5nZXRGdWxsWWVhcigpKzEpKTtlbHNlIHJldHVybiB0LnNldERhdGUodC5nZXREYXRlKCkrciksdH1yZXR1cm4gdH0sRGE9KGUscik9PntJLnNldChlLHIpfSxRcj0oZSxyLHQsbik9Pnt2YXIgYT1BW24rNDA+PjJdLGk9e3RtX3NlYzpnW24+PjJdLHRtX21pbjpnW24rND4+Ml0sdG1faG91cjpnW24rOD4+Ml0sdG1fbWRheTpnW24rMTI+PjJdLHRtX21vbjpnW24rMTY+PjJdLHRtX3llYXI6Z1tuKzIwPj4yXSx0bV93ZGF5OmdbbisyND4+Ml0sdG1feWRheTpnW24rMjg+PjJdLHRtX2lzZHN0OmdbbiszMj4+Ml0sdG1fZ210b2ZmOmdbbiszNj4+Ml0sdG1fem9uZTphP3NlKGEpOiIifSxzPXNlKHQpLGw9eyIlYyI6IiVhICViICVkICVIOiVNOiVTICVZIiwiJUQiOiIlbS8lZC8leSIsIiVGIjoiJVktJW0tJWQiLCIlaCI6IiViIiwiJXIiOiIlSTolTTolUyAlcCIsIiVSIjoiJUg6JU0iLCIlVCI6IiVIOiVNOiVTIiwiJXgiOiIlbS8lZC8leSIsIiVYIjoiJUg6JU06JVMiLCIlRWMiOiIlYyIsIiVFQyI6IiVDIiwiJUV4IjoiJW0vJWQvJXkiLCIlRVgiOiIlSDolTTolUyIsIiVFeSI6IiV5IiwiJUVZIjoiJVkiLCIlT2QiOiIlZCIsIiVPZSI6IiVlIiwiJU9IIjoiJUgiLCIlT0kiOiIlSSIsIiVPbSI6IiVtIiwiJU9NIjoiJU0iLCIlT1MiOiIlUyIsIiVPdSI6IiV1IiwiJU9VIjoiJVUiLCIlT1YiOiIlViIsIiVPdyI6IiV3IiwiJU9XIjoiJVciLCIlT3kiOiIleSJ9O2Zvcih2YXIgdSBpbiBsKXM9cy5yZXBsYWNlKG5ldyBSZWdFeHAodSwiZyIpLGxbdV0pO3ZhciBjPVsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxkPVsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXTtmdW5jdGlvbiBtKHYsXyxMKXtmb3IodmFyIFQ9dHlwZW9mIHY9PSJudW1iZXIiP3YudG9TdHJpbmcoKTp2fHwiIjtULmxlbmd0aDxfOylUPUxbMF0rVDtyZXR1cm4gVH1mdW5jdGlvbiBoKHYsXyl7cmV0dXJuIG0odixfLCIwIil9ZnVuY3Rpb24gcCh2LF8pe2Z1bmN0aW9uIEwoQil7cmV0dXJuIEI8MD8tMTpCPjA/MTowfXZhciBUO3JldHVybihUPUwodi5nZXRGdWxsWWVhcigpLV8uZ2V0RnVsbFllYXIoKSkpPT09MCYmKFQ9TCh2LmdldE1vbnRoKCktXy5nZXRNb250aCgpKSk9PT0wJiYoVD1MKHYuZ2V0RGF0ZSgpLV8uZ2V0RGF0ZSgpKSksVH1mdW5jdGlvbiB3KHYpe3N3aXRjaCh2LmdldERheSgpKXtjYXNlIDA6cmV0dXJuIG5ldyBEYXRlKHYuZ2V0RnVsbFllYXIoKS0xLDExLDI5KTtjYXNlIDE6cmV0dXJuIHY7Y2FzZSAyOnJldHVybiBuZXcgRGF0ZSh2LmdldEZ1bGxZZWFyKCksMCwzKTtjYXNlIDM6cmV0dXJuIG5ldyBEYXRlKHYuZ2V0RnVsbFllYXIoKSwwLDIpO2Nhc2UgNDpyZXR1cm4gbmV3IERhdGUodi5nZXRGdWxsWWVhcigpLDAsMSk7Y2FzZSA1OnJldHVybiBuZXcgRGF0ZSh2LmdldEZ1bGxZZWFyKCktMSwxMSwzMSk7Y2FzZSA2OnJldHVybiBuZXcgRGF0ZSh2LmdldEZ1bGxZZWFyKCktMSwxMSwzMCl9fWZ1bmN0aW9uIEQodil7dmFyIF89QWEobmV3IERhdGUodi50bV95ZWFyKzE5MDAsMCwxKSx2LnRtX3lkYXkpLEw9bmV3IERhdGUoXy5nZXRGdWxsWWVhcigpLDAsNCksVD1uZXcgRGF0ZShfLmdldEZ1bGxZZWFyKCkrMSwwLDQpLEI9dyhMKSxPPXcoVCk7cmV0dXJuIHAoQixfKTw9MD9wKE8sXyk8PTA/Xy5nZXRGdWxsWWVhcigpKzE6Xy5nZXRGdWxsWWVhcigpOl8uZ2V0RnVsbFllYXIoKS0xfXZhciBNPXsiJWEiOnY9PmNbdi50bV93ZGF5XS5zdWJzdHJpbmcoMCwzKSwiJUEiOnY9PmNbdi50bV93ZGF5XSwiJWIiOnY9PmRbdi50bV9tb25dLnN1YnN0cmluZygwLDMpLCIlQiI6dj0+ZFt2LnRtX21vbl0sIiVDIjp2PT57dmFyIF89di50bV95ZWFyKzE5MDA7cmV0dXJuIGgoXy8xMDB8MCwyKX0sIiVkIjp2PT5oKHYudG1fbWRheSwyKSwiJWUiOnY9Pm0odi50bV9tZGF5LDIsIiAiKSwiJWciOnY9PkQodikudG9TdHJpbmcoKS5zdWJzdHJpbmcoMiksIiVHIjpELCIlSCI6dj0+aCh2LnRtX2hvdXIsMiksIiVJIjp2PT57dmFyIF89di50bV9ob3VyO3JldHVybiBfPT0wP189MTI6Xz4xMiYmKF8tPTEyKSxoKF8sMil9LCIlaiI6dj0+aCh2LnRtX21kYXkrUGEoQmUodi50bV95ZWFyKzE5MDApP0pyOlpyLHYudG1fbW9uLTEpLDMpLCIlbSI6dj0+aCh2LnRtX21vbisxLDIpLCIlTSI6dj0+aCh2LnRtX21pbiwyKSwiJW4iOigpPT5gCmAsIiVwIjp2PT52LnRtX2hvdXI+PTAmJnYudG1faG91cjwxMj8iQU0iOiJQTSIsIiVTIjp2PT5oKHYudG1fc2VjLDIpLCIldCI6KCk9PiIJIiwiJXUiOnY9PnYudG1fd2RheXx8NywiJVUiOnY9Pnt2YXIgXz12LnRtX3lkYXkrNy12LnRtX3dkYXk7cmV0dXJuIGgoTWF0aC5mbG9vcihfLzcpLDIpfSwiJVYiOnY9Pnt2YXIgXz1NYXRoLmZsb29yKCh2LnRtX3lkYXkrNy0odi50bV93ZGF5KzYpJTcpLzcpO2lmKCh2LnRtX3dkYXkrMzcxLXYudG1feWRheS0yKSU3PD0yJiZfKyssXyl7aWYoXz09NTMpe3ZhciBUPSh2LnRtX3dkYXkrMzcxLXYudG1feWRheSklNztUIT00JiYoVCE9M3x8IUJlKHYudG1feWVhcikpJiYoXz0xKX19ZWxzZXtfPTUyO3ZhciBMPSh2LnRtX3dkYXkrNy12LnRtX3lkYXktMSklNzsoTD09NHx8TD09NSYmQmUodi50bV95ZWFyJTQwMC0xKSkmJl8rK31yZXR1cm4gaChfLDIpfSwiJXciOnY9PnYudG1fd2RheSwiJVciOnY9Pnt2YXIgXz12LnRtX3lkYXkrNy0odi50bV93ZGF5KzYpJTc7cmV0dXJuIGgoTWF0aC5mbG9vcihfLzcpLDIpfSwiJXkiOnY9Pih2LnRtX3llYXIrMTkwMCkudG9TdHJpbmcoKS5zdWJzdHJpbmcoMiksIiVZIjp2PT52LnRtX3llYXIrMTkwMCwiJXoiOnY9Pnt2YXIgXz12LnRtX2dtdG9mZixMPV8+PTA7cmV0dXJuIF89TWF0aC5hYnMoXykvNjAsXz1fLzYwKjEwMCtfJTYwLChMPyIrIjoiLSIpKygiMDAwMCIrXykuc2xpY2UoLTQpfSwiJVoiOnY9PnYudG1fem9uZSwiJSUiOigpPT4iJSJ9O3M9cy5yZXBsYWNlKC8lJS9nLCJcMFwwIik7Zm9yKHZhciB1IGluIE0pcy5pbmNsdWRlcyh1KSYmKHM9cy5yZXBsYWNlKG5ldyBSZWdFeHAodSwiZyIpLE1bdV0oaSkpKTtzPXMucmVwbGFjZSgvXDBcMC9nLCIlIik7dmFyIEY9U2UocywhMSk7cmV0dXJuIEYubGVuZ3RoPnI/MDooRGEoRixlKSxGLmxlbmd0aC0xKX0sJGE9KGUscix0LG4sYSk9PlFyKGUscix0LG4pO28uY3JlYXRlUHJlbG9hZGVkRmlsZT1WdCxvLnN0YXRpY0luaXQoKSxTcj1mLkludGVybmFsRXJyb3I9Y2xhc3MgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihyKXtzdXBlcihyKSx0aGlzLm5hbWU9IkludGVybmFsRXJyb3IifX0sZW4oKSxtZT1mLkJpbmRpbmdFcnJvcj1jbGFzcyBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKHIpe3N1cGVyKHIpLHRoaXMubmFtZT0iQmluZGluZ0Vycm9yIn19LHZuKCksdW4oKSxFbigpLHhyPWYuVW5ib3VuZFR5cGVFcnJvcj1BbihFcnJvciwiVW5ib3VuZFR5cGVFcnJvciIpLE9uKCk7dmFyIENhPXtsOkN0LGM6VHQsVTpqdCxzOnp0LFI6eHQsSjpIdCxXOld0LE86QnQsUDpOdCxLOll0LEk6R3QsSDpxdCxROlh0LEU6S3QsVjpKdCxrOlp0LEI6UXQsWjp0bixoOkRuLHk6Rm4sajpUbixiOlNuLGE6TW4sWTpZcix3OlZuLGk6VW4sZjp6bixkOnhuLG06SG4sdjpXbix0OktuLG46Sm4sZTpabixfOlFuLFM6cmEsVDp0YSx4Ok5yLGFhOm5hLCQ6YWEsZzppYSx6OnNhLEY6bGEscDp1YSxHOmZhLG86S3IsRDpkYSxNOm1hLE46cGEscjpfYSxMOmdhLHU6d2EsQTpFYSxxOmthLFg6UXIsQzokYX0sej0kdCgpLGZyPWU9Pihmcj16LmRhKShlKSxldD1lPT4oZXQ9ei5mYSkoZSksWj1lPT4oWj16LmdhKShlKSxydD1lPT4ocnQ9ei5pYSkoZSk7Zi5keW5DYWxsX2ppamk9KGUscix0LG4sYSk9PihmLmR5bkNhbGxfamlqaT16LmphKShlLHIsdCxuLGEpLGYuZHluQ2FsbF9paWlqaT0oZSxyLHQsbixhLGkpPT4oZi5keW5DYWxsX2lpaWppPXoua2EpKGUscix0LG4sYSxpKSxmLmR5bkNhbGxfamlpaWo9KGUscix0LG4sYSxpKT0+KGYuZHluQ2FsbF9qaWlpaj16LmxhKShlLHIsdCxuLGEsaSksZi5keW5DYWxsX2lpaWlpaj0oZSxyLHQsbixhLGkscyk9PihmLmR5bkNhbGxfaWlpaWlqPXoubWEpKGUscix0LG4sYSxpLHMpLGYuZHluQ2FsbF92aWlqaWk9KGUscix0LG4sYSxpLHMpPT4oZi5keW5DYWxsX3ZpaWppaT16Lm5hKShlLHIsdCxuLGEsaSxzKSxmLmR5bkNhbGxfaWlpaWlqaj0oZSxyLHQsbixhLGkscyxsLHUpPT4oZi5keW5DYWxsX2lpaWlpamo9ei5vYSkoZSxyLHQsbixhLGkscyxsLHUpLGYuZHluQ2FsbF9paWlpaWlqaj0oZSxyLHQsbixhLGkscyxsLHUsYyk9PihmLmR5bkNhbGxfaWlpaWlpamo9ei5wYSkoZSxyLHQsbixhLGkscyxsLHUsYyksZi5fZmZfaDI2NF9jYWJhY190YWJsZXM9MjA2ODEyO3ZhciBOZTtnZT1mdW5jdGlvbiBlKCl7TmV8fHR0KCksTmV8fChnZT1lKX07ZnVuY3Rpb24gdHQoKXtpZihvZT4wfHwocHQoKSxvZT4wKSlyZXR1cm47ZnVuY3Rpb24gZSgpe05lfHwoTmU9ITAsZi5jYWxsZWRSdW49ITAsIXByJiYoX3QoKSxVKGYpLGYub25SdW50aW1lSW5pdGlhbGl6ZWQmJmYub25SdW50aW1lSW5pdGlhbGl6ZWQoKSxndCgpKSl9Zi5zZXRTdGF0dXM/KGYuc2V0U3RhdHVzKCJSdW5uaW5nLi4uIiksc2V0VGltZW91dChmdW5jdGlvbigpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXtmLnNldFN0YXR1cygiIil9LDEpLGUoKX0sMSkpOmUoKX1pZihmLnByZUluaXQpZm9yKHR5cGVvZiBmLnByZUluaXQ9PSJmdW5jdGlvbiImJihmLnByZUluaXQ9W2YucHJlSW5pdF0pO2YucHJlSW5pdC5sZW5ndGg+MDspZi5wcmVJbml0LnBvcCgpKCk7dHQoKTtsZXQgbnQ9MzI7ZnVuY3Rpb24gYXQoZSxyPTMsdD01MDApe2xldCBuPTA7Zm9yKDtuPHI7KXRyeXtyZXR1cm4gZSgpfWNhdGNoKGEpe2lmKG50Pj0yNCYmY29uc29sZS53YXJuKGBBdHRlbXB0ICR7bisxfSBmYWlsZWQ6ICR7YS5tZXNzYWdlfWApLG4rKyxuPj1yKXRocm93IG5ldyBFcnJvcihgRmFpbGVkIGFmdGVyICR7cn0gYXR0ZW1wdHNgKX19ZnVuY3Rpb24gRmEoZSl7Y29uc3Qgcj1uZXcgWE1MSHR0cFJlcXVlc3Q7aWYoci5vcGVuKCJIRUFEIixlLCExKSxyLnNlbmQoKSxyLnN0YXR1cyE9PTIwMCl0aHJvdyBuZXcgRXJyb3IoYGdldEZpbGVTaXplIHJlcXVlc3QgZmFpbGVkOiAke2V9YCk7cmV0dXJuIHBhcnNlSW50KHIuZ2V0UmVzcG9uc2VIZWFkZXIoIkNvbnRlbnQtTGVuZ3RoIikpfWZ1bmN0aW9uIFRhKGUscix0KXtjb25zdCBuPW5ldyBYTUxIdHRwUmVxdWVzdDtpZihuLm9wZW4oIkdFVCIsZSwhMSksbi5zZXRSZXF1ZXN0SGVhZGVyKCJSYW5nZSIsYGJ5dGVzPSR7cn0tJHtyK3QtMX1gKSxuLnJlc3BvbnNlVHlwZT0iYXJyYXlidWZmZXIiLG4uc2VuZCgpLG4uc3RhdHVzIT09MjA2JiZuLnN0YXR1cyE9PTIwMCl0aHJvdyBuZXcgRXJyb3IoYGZldGNoQXJyYXlCdWZmZXIgcmVxdWVzdCBmYWlsZWQ6ICR7ZX1gKTtyZXR1cm4gbi5yZXNwb25zZX1jbGFzcyBwZXtjb25zdHJ1Y3RvcihyKXtsZXQgdDt0eXBlb2Ygcj09InN0cmluZyI/KHQ9bmV3IEZpbGUoW10sZW5jb2RlVVJJQ29tcG9uZW50KHIpKSxvLmZpbGVzeXN0ZW1zLldPUktFUkZTLnN0cmVhbV9vcHMucmVhZD1mdW5jdGlvbihhLGkscyxsLHUpe2NvbnN0IGM9ZGVjb2RlVVJJQ29tcG9uZW50KGEubm9kZS5jb250ZW50cy5uYW1lKTtpZihhLm5vZGUuc2l6ZT09PTAmJihhLm5vZGUuc2l6ZT1hdCgoKT0+RmEoYykpKSx1Pj1hLm5vZGUuc2l6ZSlyZXR1cm4gMDtjb25zdCBkPWF0KCgpPT5UYShjLHUsbCkpLG09ZC5ieXRlTGVuZ3RoO3JldHVybiBpLnNldChuZXcgVWludDhBcnJheShkKSxzKSxtfSk6dD1yLHRoaXMubW91bnRQb2ludD0iL2RhdGEiLHRoaXMubW91bnRPcHRzPXtmaWxlczpbdF19LHRoaXMuZmlsZVBhdGg9dGhpcy5tb3VudFBvaW50KyIvIit0Lm5hbWV9bW91bnQoKXtvLm1rZGlyKHRoaXMubW91bnRQb2ludCksby5tb3VudChvLmZpbGVzeXN0ZW1zLldPUktFUkZTLHRoaXMubW91bnRPcHRzLHRoaXMubW91bnRQb2ludCl9dW5tb3VudCgpe28udW5tb3VudCh0aGlzLm1vdW50UG9pbnQpLG8ucm1kaXIodGhpcy5tb3VudFBvaW50KX19ZnVuY3Rpb24gY3IoZSl7Y29uc3Qgcj1uZXcgVWludDhBcnJheShlLmV4dHJhZGF0YSksdD17aWQ6ZS5pZCxpbmRleDplLmluZGV4LGNvZGVjX3R5cGU6ZS5jb2RlY190eXBlLGNvZGVjX3R5cGVfc3RyaW5nOmUuY29kZWNfdHlwZV9zdHJpbmcsY29kZWNfbmFtZTplLmNvZGVjX25hbWUsY29kZWNfc3RyaW5nOmUuY29kZWNfc3RyaW5nLGNvbG9yX3ByaW1hcmllczplLmNvbG9yX3ByaW1hcmllcyxjb2xvcl90cmFuc2ZlcjplLmNvbG9yX3RyYW5zZmVyLGNvbG9yX3NwYWNlOmUuY29sb3Jfc3BhY2UsY29sb3JfcmFuZ2U6ZS5jb2xvcl9yYW5nZSxwcm9maWxlOmUucHJvZmlsZSxwaXhfZm10OmUucGl4X2ZtdCxsZXZlbDplLmxldmVsLHdpZHRoOmUud2lkdGgsaGVpZ2h0OmUuaGVpZ2h0LGNoYW5uZWxzOmUuY2hhbm5lbHMsc2FtcGxlX3JhdGU6ZS5zYW1wbGVfcmF0ZSxzYW1wbGVfZm10OmUuc2FtcGxlX2ZtdCxiaXRfcmF0ZTplLmJpdF9yYXRlLGV4dHJhZGF0YV9zaXplOmUuZXh0cmFkYXRhX3NpemUsZXh0cmFkYXRhOnIscl9mcmFtZV9yYXRlOmUucl9mcmFtZV9yYXRlLGF2Z19mcmFtZV9yYXRlOmUuYXZnX2ZyYW1lX3JhdGUsc2FtcGxlX2FzcGVjdF9yYXRpbzplLnNhbXBsZV9hc3BlY3RfcmF0aW8sZGlzcGxheV9hc3BlY3RfcmF0aW86ZS5kaXNwbGF5X2FzcGVjdF9yYXRpbyxzdGFydF90aW1lOmUuc3RhcnRfdGltZSxkdXJhdGlvbjplLmR1cmF0aW9uLHJvdGF0aW9uOmUucm90YXRpb24sZmxpcDplLmZsaXAsbmJfZnJhbWVzOmUubmJfZnJhbWVzLHRhZ3M6ZS50YWdzfTtyZXR1cm4gZS5kZWxldGUoKSx0fWZ1bmN0aW9uIGRyKGUpe2NvbnN0IHI9bmV3IFVpbnQ4QXJyYXkoZS5kYXRhKSx0PXtrZXlmcmFtZTplLmtleWZyYW1lLHRpbWVzdGFtcDplLnRpbWVzdGFtcCxkdXJhdGlvbjplLmR1cmF0aW9uLHNpemU6ZS5zaXplLGRhdGE6cn07cmV0dXJuIGUuZGVsZXRlKCksdH1mdW5jdGlvbiBTYShlLHI9MCx0PS0xKXtjb25zdCBuPW5ldyBwZShlKTtuLm1vdW50KCk7dHJ5e2NvbnN0IGE9Zi5nZXRfYXZfc3RyZWFtKG4uZmlsZVBhdGgscix0KTtyZXR1cm4gY3IoYSl9Y2F0Y2goYSl7dGhyb3cgbmV3IEVycm9yKCJnZXRfYXZfc3RyZWFtIGZhaWxlZDogIithLm1lc3NhZ2UpfWZpbmFsbHl7bi51bm1vdW50KCl9fWZ1bmN0aW9uIE1hKGUpe2NvbnN0IHI9bmV3IHBlKGUpO3IubW91bnQoKTt0cnl7Y29uc3QgdD1mLmdldF9hdl9zdHJlYW1zKHIuZmlsZVBhdGgpLG49W107Zm9yKGxldCBhPTA7YTx0LnN0cmVhbXMuc2l6ZSgpO2ErKyluLnB1c2goY3IodC5zdHJlYW1zLmdldChhKSkpO3JldHVybiB0LnN0cmVhbXMuZGVsZXRlKCksbn1jYXRjaCh0KXt0aHJvdyBuZXcgRXJyb3IoImdldF9hdl9zdHJlYW1zIGZhaWxlZDogIit0Lm1lc3NhZ2UpfWZpbmFsbHl7ci51bm1vdW50KCl9fWZ1bmN0aW9uIFJhKGUpe2NvbnN0IHI9bmV3IHBlKGUpO3IubW91bnQoKTt0cnl7Y29uc3QgdD1mLmdldF9tZWRpYV9pbmZvKHIuZmlsZVBhdGgpLG49e2Zvcm1hdF9uYW1lOnQuZm9ybWF0X25hbWUsZHVyYXRpb246dC5kdXJhdGlvbixiaXRfcmF0ZTp0LmJpdF9yYXRlLHN0YXJ0X3RpbWU6dC5zdGFydF90aW1lLG5iX3N0cmVhbXM6dC5uYl9zdHJlYW1zLHN0cmVhbXM6W119O2ZvcihsZXQgYT0wO2E8dC5zdHJlYW1zLnNpemUoKTthKyspbi5zdHJlYW1zLnB1c2goY3IodC5zdHJlYW1zLmdldChhKSkpO3JldHVybiB0LnN0cmVhbXMuZGVsZXRlKCksbn1jYXRjaCh0KXt0aHJvdyBuZXcgRXJyb3IoImdldF9tZWRpYV9pbmZvIGZhaWxlZDogIit0Lm1lc3NhZ2UpfWZpbmFsbHl7ci51bm1vdW50KCl9fWZ1bmN0aW9uIE9hKGUscix0PTAsbj0tMSxhPTEpe2NvbnN0IGk9bmV3IHBlKGUpO2kubW91bnQoKTt0cnl7Y29uc3Qgcz1mLmdldF9hdl9wYWNrZXQoaS5maWxlUGF0aCxyLHQsbixhKTtyZXR1cm4gZHIocyl9Y2F0Y2gocyl7dGhyb3cgbmV3IEVycm9yKCJnZXRfYXZfcGFja2V0IGZhaWxlZDogIitzLm1lc3NhZ2UpfWZpbmFsbHl7aS51bm1vdW50KCl9fWZ1bmN0aW9uIElhKGUscix0PTEpe2NvbnN0IG49bmV3IHBlKGUpO24ubW91bnQoKTt0cnl7Y29uc3QgYT1mLmdldF9hdl9wYWNrZXRzKG4uZmlsZVBhdGgscix0KSxpPVtdO2ZvcihsZXQgcz0wO3M8YS5wYWNrZXRzLnNpemUoKTtzKyspaS5wdXNoKGRyKGEucGFja2V0cy5nZXQocykpKTtyZXR1cm4gYS5wYWNrZXRzLmRlbGV0ZSgpLGl9Y2F0Y2goYSl7dGhyb3cgbmV3IEVycm9yKCJnZXRfYXZfcGFja2V0cyBmYWlsZWQ6ICIrYS5tZXNzYWdlKX1maW5hbGx5e24udW5tb3VudCgpfX1hc3luYyBmdW5jdGlvbiBMYShlLHIsdD0wLG49MCxhPTAsaT0tMSxzPTEpe2NvbnN0IGw9bmV3IHBlKHIpO2wubW91bnQoKTtsZXQgdT1udWxsO3RyeXtpZih1PWYuQVZQYWNrZXRSZWFkZXIuY3JlYXRlKGwuZmlsZVBhdGgsdCxuLGEsaSxzKSwhdSl0aHJvdyBuZXcgRXJyb3IoIkFWUGFja2V0UmVhZGVyLmNyZWF0ZSBmYWlsZWQgKG51bGwgcmVhZGVyKSIpO2NvbnN0IGM9VmEoZSk7Zm9yKDs7KXtjb25zdCBkPXUucmVhZF9uZXh0X2F2X3BhY2tldCgpO2lmKHUuaGFzX2Vycm9yKCkpdGhyb3cgbmV3IEVycm9yKCJBVlBhY2tldFJlYWRlciByZWFkX25leHRfYXZfcGFja2V0IGVycm9yIik7aWYodS5pc19maW5pc2hlZCgpKXthd2FpdCBjKDApO2JyZWFrfWlmKGF3YWl0IGMoZCk9PT0wKWJyZWFrfX1jYXRjaChjKXt0aHJvdyBuZXcgRXJyb3IoInJlYWRBVlBhY2tldCBwaXBlbGluZSBmYWlsZWQ6ICIrYy5tZXNzYWdlKX1maW5hbGx5e3UmJnUuZGVsZXRlKCksbC51bm1vdW50KCl9cmV0dXJuIDF9ZnVuY3Rpb24gVmEoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBuZXcgUHJvbWlzZShuPT57Y29uc3QgYT17dHlwZToiQVZQYWNrZXRTdHJlYW0iLG1zZ0lkOmUscmVzdWx0Om51bGx9O2lmKHQ9PT0wKXtzZWxmLnBvc3RNZXNzYWdlKGEpLG4oMSk7cmV0dXJufWNvbnN0IGk9ZHIodCk7YS5yZXN1bHQ9aSxzZWxmLnBvc3RNZXNzYWdlKGEsW2kuZGF0YS5idWZmZXJdKTtjb25zdCBzPWw9Pntjb25zdHt0eXBlOnUsbXNnSWQ6Y309bC5kYXRhO2M9PT1lJiYodT09PSJSZWFkTmV4dEFWUGFja2V0Ij8oc2VsZi5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixzKSxuKDEpKTp1PT09IlN0b3BSZWFkQVZQYWNrZXQiJiYoc2VsZi5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixzKSxuKDApKSl9O3NlbGYuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIscyl9KX19ZnVuY3Rpb24gVWEoZSl7bnQ9ZSxmLnNldF9hdl9sb2dfbGV2ZWwoZSl9cmV0dXJuIGYuZ2V0QVZTdHJlYW09U2EsZi5nZXRBVlN0cmVhbXM9TWEsZi5nZXRNZWRpYUluZm89UmEsZi5nZXRBVlBhY2tldD1PYSxmLmdldEFWUGFja2V0cz1JYSxmLnJlYWRBVlBhY2tldD1MYSxmLnNldEFWTG9nTGV2ZWw9VWEsQz1uZSxDfX0pKCk7bGV0IFE7c2VsZi5wb3N0TWVzc2FnZSh7dHlwZTpHLldhc21Xb3JrZXJMb2FkZWR9KSxzZWxmLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGFzeW5jIGZ1bmN0aW9uKEUpe2NvbnN0e3R5cGU6UixkYXRhOkMsbXNnSWQ6Zn09RS5kYXRhO3RyeXtzd2l0Y2goUil7Y2FzZSJMb2FkV0FTTSI6cmV0dXJuIGF3YWl0IHN0KEMpO2Nhc2UiR2V0QVZTdHJlYW0iOnJldHVybiBsdChDLGYpO2Nhc2UiR2V0QVZTdHJlYW1zIjpyZXR1cm4gdXQoQyxmKTtjYXNlIkdldE1lZGlhSW5mbyI6cmV0dXJuIGZ0KEMsZik7Y2FzZSJHZXRBVlBhY2tldCI6cmV0dXJuIGN0KEMsZik7Y2FzZSJHZXRBVlBhY2tldHMiOnJldHVybiBkdChDLGYpO2Nhc2UiUmVhZEFWUGFja2V0IjpyZXR1cm4gYXdhaXQgdnQoQyxmKTtjYXNlIlNldEFWTG9nTGV2ZWwiOnJldHVybiBodChDLGYpO2RlZmF1bHQ6cmV0dXJufX1jYXRjaChVKXtzZWxmLnBvc3RNZXNzYWdlKHt0eXBlOlIsbXNnSWQ6ZixlcnJNc2c6VSBpbnN0YW5jZW9mIEVycm9yP1UubWVzc2FnZToiVW5rbm93biBFcnJvciJ9KX19KTthc3luYyBmdW5jdGlvbiBzdChFKXtjb25zdHt3YXNtRmlsZVBhdGg6Un09RXx8e307UT1hd2FpdCBpdCh7bG9jYXRlRmlsZTooQyxmKT0+Qy5lbmRzV2l0aCgiLndhc20iKSYmUj9SOmYrQyxvblJ1bnRpbWVJbml0aWFsaXplZDooKT0+e3NlbGYucG9zdE1lc3NhZ2Uoe3R5cGU6Ry5XQVNNUnVudGltZUluaXRpYWxpemVkfSl9fSl9ZnVuY3Rpb24gbHQoRSxSKXtjb25zdHtzb3VyY2U6QyxzdHJlYW1UeXBlOmYsc3RyZWFtSW5kZXg6VX09RSxIPVEuZ2V0QVZTdHJlYW0oQyxmLFUpO3NlbGYucG9zdE1lc3NhZ2Uoe3R5cGU6Ry5HZXRBVlN0cmVhbSxtc2dJZDpSLHJlc3VsdDpIfSxbSC5leHRyYWRhdGEuYnVmZmVyXSl9ZnVuY3Rpb24gdXQoRSxSKXtjb25zdHtzb3VyY2U6Q309RSxmPVEuZ2V0QVZTdHJlYW1zKEMpO3NlbGYucG9zdE1lc3NhZ2Uoe3R5cGU6Ry5HZXRBVlN0cmVhbXMsbXNnSWQ6UixyZXN1bHQ6Zn0sZi5tYXAoVT0+VS5leHRyYWRhdGEuYnVmZmVyKSl9ZnVuY3Rpb24gZnQoRSxSKXtjb25zdHtzb3VyY2U6Q309RSxmPVEuZ2V0TWVkaWFJbmZvKEMpO3NlbGYucG9zdE1lc3NhZ2Uoe3R5cGU6Ry5HZXRNZWRpYUluZm8sbXNnSWQ6UixyZXN1bHQ6Zn0sZi5zdHJlYW1zLm1hcChVPT5VLmV4dHJhZGF0YS5idWZmZXIpKX1mdW5jdGlvbiBjdChFLFIpe2NvbnN0e3NvdXJjZTpDLHRpbWU6ZixzdHJlYW1UeXBlOlUsc3RyZWFtSW5kZXg6SCxzZWVrRmxhZzpuZX09RSxhZT1RLmdldEFWUGFja2V0KEMsZixVLEgsbmUpO3NlbGYucG9zdE1lc3NhZ2Uoe3R5cGU6Ry5HZXRBVlBhY2tldCxtc2dJZDpSLHJlc3VsdDphZX0sW2FlLmRhdGEuYnVmZmVyXSl9ZnVuY3Rpb24gZHQoRSxSKXtjb25zdHtzb3VyY2U6Qyx0aW1lOmYsc2Vla0ZsYWc6VX09RSxIPVEuZ2V0QVZQYWNrZXRzKEMsZixVKTtzZWxmLnBvc3RNZXNzYWdlKHt0eXBlOkcuR2V0QVZQYWNrZXRzLG1zZ0lkOlIscmVzdWx0Okh9LEgubWFwKG5lPT5uZS5kYXRhLmJ1ZmZlcikpfWFzeW5jIGZ1bmN0aW9uIHZ0KEUsUil7Y29uc3R7c291cmNlOkMsc3RhcnQ6ZixlbmQ6VSxzdHJlYW1UeXBlOkgsc3RyZWFtSW5kZXg6bmUsc2Vla0ZsYWc6YWV9PUUsRGU9YXdhaXQgUS5yZWFkQVZQYWNrZXQoUixDLGYsVSxILG5lLGFlKTtzZWxmLnBvc3RNZXNzYWdlKHt0eXBlOkcuUmVhZEFWUGFja2V0LG1zZ0lkOlIscmVzdWx0OkRlfSl9ZnVuY3Rpb24gaHQoRSxSKXtjb25zdHtsZXZlbDpDfT1FO1Euc2V0QVZMb2dMZXZlbChDKSxzZWxmLnBvc3RNZXNzYWdlKHt0eXBlOiJTZXRBVkxvZ0xldmVsIixtc2dJZDpSfSl9fSkoKTsK",va=e=>Uint8Array.from(atob(e),t=>t.charCodeAt(0)),Ks=typeof window<"u"&&window.Blob&&new Blob([va(hn)],{type:"text/javascript;charset=utf-8"});function Ia(e){let t;try{if(t=Ks&&(window.URL||window.webkitURL).createObjectURL(Ks),!t)throw"";const i=new Worker(t,{name:e==null?void 0:e.name});return i.addEventListener("error",()=>{(window.URL||window.webkitURL).revokeObjectURL(t)}),i}catch{return new Worker("data:text/javascript;base64,"+hn,{name:e==null?void 0:e.name})}finally{t&&(window.URL||window.webkitURL).revokeObjectURL(t)}}const Ms=1e6;class fi{constructor(t){oi(this,"wasmWorker"),oi(this,"wasmWorkerLoadStatus"),oi(this,"msgId"),oi(this,"source"),this.wasmWorker=new Ia({name:"web-demuxer"}),this.wasmWorkerLoadStatus=new Promise((i,n)=>{this.wasmWorker.addEventListener("message",d=>{const{type:o,errMsg:u}=d.data;o===rt.WasmWorkerLoaded&&this.post(rt.LoadWASM,{wasmFilePath:t==null?void 0:t.wasmFilePath}),o===rt.WASMRuntimeInitialized&&i(),o===rt.LoadWASM&&u&&n(u)})}),this.msgId=0}post(t,i,n){this.wasmWorker.postMessage({type:t,msgId:n??this.msgId++,data:i})}getFromWorker(t,i){return new Promise((n,d)=>{if(!this.source){d("source is not loaded. call load() first");return}const o=this.msgId,u=h=>{let{data:S}=h;S.type===t&&S.msgId===o&&(S.errMsg?d(S.errMsg):n(S.result),this.wasmWorker.removeEventListener("message",u))};this.wasmWorker.addEventListener("message",u),this.post(t,i,o)})}async load(t){await this.wasmWorkerLoadStatus,this.source=t}destroy(){this.source=void 0,this.wasmWorker.terminate()}getMediaInfo(){return this.getFromWorker(rt.GetMediaInfo,{source:this.source})}getAVStream(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:I0.AVMEDIA_TYPE_VIDEO,i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:-1;return this.getFromWorker(rt.GetAVStream,{source:this.source,streamType:t,streamIndex:i})}getAVStreams(){return this.getFromWorker(rt.GetAVStreams,{source:this.source})}getAVPacket(t){let i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:I0.AVMEDIA_TYPE_VIDEO,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:-1,d=arguments.length>3&&arguments[3]!==void 0?arguments[3]:di.AVSEEK_FLAG_BACKWARD;return this.getFromWorker(rt.GetAVPacket,{source:this.source,time:t,streamType:i,streamIndex:n,seekFlag:d})}getAVPackets(t){let i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:di.AVSEEK_FLAG_BACKWARD;return this.getFromWorker(rt.GetAVPackets,{source:this.source,time:t,seekFlag:i})}readAVPacket(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0,i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:I0.AVMEDIA_TYPE_VIDEO,d=arguments.length>3&&arguments[3]!==void 0?arguments[3]:-1,o=arguments.length>4&&arguments[4]!==void 0?arguments[4]:di.AVSEEK_FLAG_BACKWARD;const u=new CountQueuingStrategy({highWaterMark:1}),h=this.msgId;let S=0,W,I;return new ReadableStream({start:Z=>{if(!this.source){Z.error("source is not loaded. call load() first");return}W=j=>{const w=j.data;w.type===rt.ReadAVPacket&&w.msgId===h&&w.errMsg&&(Z.error(w.errMsg),this.wasmWorker.removeEventListener("message",W)),w.type===rt.AVPacketStream&&w.msgId===h&&(w.result&&!I?Z.enqueue(w.result):(this.wasmWorker.removeEventListener("message",W),I?I():Z.close()))},this.wasmWorker.addEventListener("message",W),this.post(rt.ReadAVPacket,{source:this.source,start:t,end:i,streamType:n,streamIndex:d,seekFlag:o})},pull:()=>{S>0&&this.post(rt.ReadNextAVPacket,void 0,h),S++},cancel:()=>new Promise(Z=>{I=Z,this.post(rt.StopReadAVPacket,void 0,h)})},u)}setLogLevel(t){return this.getFromWorker(rt.SetAVLogLevel,{level:t})}getMediaStream(t,i){return this.getAVStream(Ci[t],i)}seekMediaPacket(t,i,n){return this.getAVPacket(i,Ci[t],void 0,n)}readMediaPacket(t,i,n,d){return this.readAVPacket(i,n,Ci[t],void 0,d)}genDecoderConfig(t,i){var n,d;return t===ws.VIDEO?{codec:i.codec_string,codedWidth:i.width,codedHeight:i.height,description:((n=i.extradata)==null?void 0:n.length)>0?i.extradata:void 0,rotation:i.rotation,flip:i.flip}:{codec:i.codec_string||"",sampleRate:i.sample_rate,numberOfChannels:i.channels,description:((d=i.extradata)==null?void 0:d.length)>0?i.extradata:void 0}}genEncodedChunk(t,i){const n={type:i.keyframe===1?"key":"delta",timestamp:i.timestamp*Ms,duration:i.duration*Ms,data:i.data};return t===ws.VIDEO?new EncodedVideoChunk(n):new EncodedAudioChunk(n)}getDecoderConfig(t){return this.getMediaStream(t).then(i=>this.genDecoderConfig(t,i))}seek(t,i,n){return this.seekMediaPacket(t,i,n).then(d=>this.genEncodedChunk(t,d))}read(t,i,n,d){return this.readMediaPacket(t,i,n,d).pipeThrough(new TransformStream({transform:(o,u)=>{const h=this.genEncodedChunk(t,o);u.enqueue(h)}}))}}let ks=!1;function Zi(){ks||(console.warn("⚠️ Demo/Learning Function: This utility is intended for demos and learning purposes only. For production use, please use a proper demuxing library like MediaBunny (https://mediabunny.dev/) or web-demuxer (https://github.com/bilibili/web-demuxer) directly."),ks=!0)}async function Va(e){Zi();const t=new fi({wasmFilePath:"https://cdn.jsdelivr.net/npm/web-demuxer@latest/dist/wasm-files/web-demuxer.wasm"});await t.load(e);const i=t.read("video",0).getReader(),n=[];return new Promise(function(d){i.read().then(async function o(u){const{done:h,value:S}=u;return S&&n.push(S),h?d(n):i.read().then(o)})})}async function Ra(e){Zi();const t=new fi({wasmFilePath:"https://cdn.jsdelivr.net/npm/web-demuxer@latest/dist/wasm-files/web-demuxer.wasm"});await t.load(e);const i=t.read("audio",0).getReader(),n=[];await new Promise(function(h){i.read().then(async function S(W){const{done:I,value:Z}=W;return Z&&n.push(Z),I?h(n):i.read().then(S)})});const o=(await t.getMediaInfo()).streams.filter(h=>h.codec_type_string==="audio")[0],u={codec:o.codec_string,sampleRate:o.sample_rate,numberOfChannels:o.channels};return{chunks:n,config:u}}async function Ta(e){Zi();const t=new fi({wasmFilePath:"https://cdn.jsdelivr.net/npm/web-demuxer@latest/dist/wasm-files/web-demuxer.wasm"});await t.load(e);const i=t.read("video",0).getReader(),n=[];await new Promise(function(h){i.read().then(async function S(W){const{done:I,value:Z}=W;return Z&&n.push(Z),I?h(n):i.read().then(S)})});const o=(await t.getMediaInfo()).streams.filter(h=>h.codec_type_string==="video")[0],u={codec:o.codec_string,codedWidth:o.width,codedHeight:o.height,description:o.extradata};return{chunks:n,config:u}}async function Wa(e){Zi();const t=new fi({wasmFilePath:"https://cdn.jsdelivr.net/npm/web-demuxer@latest/dist/wasm-files/web-demuxer.wasm"});await t.load(e);const i=t.read("audio",0).getReader(),n=[];return new Promise(function(d){i.read().then(async function o(u){const{done:h,value:S}=u;return S&&n.push(S),h?d(n):i.read().then(o)})})}/*!
280
+ * Copyright (c) 2025-present, Vanilagy and contributors
281
+ *
282
+ * This Source Code Form is subject to the terms of the Mozilla Public
283
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
284
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/.
285
+ */function ve(e){if(!e)throw new Error("Assertion failed.")}const Y0=e=>e&&e[e.length-1],M0=e=>e>=0&&e<2**32;class z0{constructor(t){this.bytes=t,this.pos=0}seekToByte(t){this.pos=8*t}readBit(){const t=Math.floor(this.pos/8),i=this.bytes[t]??0,n=7-(this.pos&7),d=(i&1<<n)>>n;return this.pos++,d}readBits(t){if(t===1)return this.readBit();let i=0;for(let n=0;n<t;n++)i<<=1,i|=this.readBit();return i}writeBits(t,i){const n=this.pos+t;for(let d=this.pos;d<n;d++){const o=Math.floor(d/8);let u=this.bytes[o];const h=7-(d&7);u&=~(1<<h),u|=(i&1<<n-d-1)>>n-d-1<<h,this.bytes[o]=u}this.pos=n}readAlignedByte(){if(this.pos%8!==0)throw new Error("Bitstream is not byte-aligned.");const t=this.pos/8,i=this.bytes[t]??0;return this.pos+=8,i}skipBits(t){this.pos+=t}getBitsLeft(){return this.bytes.length*8-this.pos}clone(){const t=new z0(this.bytes);return t.pos=this.pos,t}}const ye=e=>{let t=0;for(;e.readBits(1)===0&&t<32;)t++;if(t>=32)throw new Error("Invalid exponential-Golomb code.");return(1<<t)-1+e.readBits(t)},s0=e=>{const t=ye(e);return t&1?t+1>>1:-(t>>1)},Q0=e=>e.constructor===Uint8Array?e:ArrayBuffer.isView(e)?new Uint8Array(e.buffer,e.byteOffset,e.byteLength):new Uint8Array(e),La=e=>e.constructor===DataView?e:ArrayBuffer.isView(e)?new DataView(e.buffer,e.byteOffset,e.byteLength):new DataView(e),$t=new TextEncoder,qi={bt709:1,bt470bg:5,smpte170m:6,bt2020:9,smpte432:12},es={bt709:1,smpte170m:6,linear:8,"iec61966-2-1":13,pq:16,hlg:18},ts={rgb:0,bt709:1,bt470bg:5,smpte170m:6,"bt2020-ncl":9},xa=e=>!!e&&!!e.primaries&&!!e.transfer&&!!e.matrix&&e.fullRange!==void 0,bn=e=>e instanceof ArrayBuffer||typeof SharedArrayBuffer<"u"&&e instanceof SharedArrayBuffer||ArrayBuffer.isView(e);class pn{constructor(){this.currentPromise=Promise.resolve()}async acquire(){let t;const i=new Promise(d=>{t=d}),n=this.currentPromise;return this.currentPromise=i,await n,t}}const Ha=()=>{let e,t;return{promise:new Promise((n,d)=>{e=n,t=d}),resolve:e,reject:t}},yn=e=>{throw new Error(`Unexpected value: ${e}`)},Ya=(e,t,i,n)=>{i=i>>>0,i=i&16777215,e.setUint8(t,i>>>16&255),e.setUint8(t+1,i>>>8&255),e.setUint8(t+2,i&255)},wa="und",Ka=/^[a-z]{3}$/,Ma=e=>Ka.test(e),Bs=1e6*(1+Number.EPSILON),ka=(e,t)=>{const i=e<0?-1:1;e=Math.abs(e);let n=0,d=1,o=1,u=0,h=e;for(;;){const S=Math.floor(h),W=S*o+n,I=S*u+d;if(I>t)return{numerator:i*o,denominator:u};if(n=o,d=u,o=W,u=I,h=1/(h-S),!isFinite(h))break}return{numerator:i*o,denominator:u}},fn=function*(e){for(const t in e){const i=e[t];i!==void 0&&(yield{key:t,value:i})}};/*!
286
+ * Copyright (c) 2025-present, Vanilagy and contributors
287
+ *
288
+ * This Source Code Form is subject to the terms of the Mozilla Public
289
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
290
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/.
291
+ */class Zn{constructor(t,i){if(this.data=t,this.mimeType=i,!(t instanceof Uint8Array))throw new TypeError("data must be a Uint8Array.");if(typeof i!="string")throw new TypeError("mimeType must be a string.")}}class Ba{constructor(t,i,n,d){if(this.data=t,this.mimeType=i,this.name=n,this.description=d,!(t instanceof Uint8Array))throw new TypeError("data must be a Uint8Array.");if(i!==void 0&&typeof i!="string")throw new TypeError("mimeType, when provided, must be a string.");if(n!==void 0&&typeof n!="string")throw new TypeError("name, when provided, must be a string.");if(d!==void 0&&typeof d!="string")throw new TypeError("description, when provided, must be a string.")}}const Ca=e=>{if(!e||typeof e!="object")throw new TypeError("tags must be an object.");if(e.title!==void 0&&typeof e.title!="string")throw new TypeError("tags.title, when provided, must be a string.");if(e.description!==void 0&&typeof e.description!="string")throw new TypeError("tags.description, when provided, must be a string.");if(e.artist!==void 0&&typeof e.artist!="string")throw new TypeError("tags.artist, when provided, must be a string.");if(e.album!==void 0&&typeof e.album!="string")throw new TypeError("tags.album, when provided, must be a string.");if(e.albumArtist!==void 0&&typeof e.albumArtist!="string")throw new TypeError("tags.albumArtist, when provided, must be a string.");if(e.trackNumber!==void 0&&(!Number.isInteger(e.trackNumber)||e.trackNumber<=0))throw new TypeError("tags.trackNumber, when provided, must be a positive integer.");if(e.tracksTotal!==void 0&&(!Number.isInteger(e.tracksTotal)||e.tracksTotal<=0))throw new TypeError("tags.tracksTotal, when provided, must be a positive integer.");if(e.discNumber!==void 0&&(!Number.isInteger(e.discNumber)||e.discNumber<=0))throw new TypeError("tags.discNumber, when provided, must be a positive integer.");if(e.discsTotal!==void 0&&(!Number.isInteger(e.discsTotal)||e.discsTotal<=0))throw new TypeError("tags.discsTotal, when provided, must be a positive integer.");if(e.genre!==void 0&&typeof e.genre!="string")throw new TypeError("tags.genre, when provided, must be a string.");if(e.date!==void 0&&(!(e.date instanceof Date)||Number.isNaN(e.date.getTime())))throw new TypeError("tags.date, when provided, must be a valid Date.");if(e.lyrics!==void 0&&typeof e.lyrics!="string")throw new TypeError("tags.lyrics, when provided, must be a string.");if(e.images!==void 0){if(!Array.isArray(e.images))throw new TypeError("tags.images, when provided, must be an array.");for(const t of e.images){if(!t||typeof t!="object")throw new TypeError("Each image in tags.images must be an object.");if(!(t.data instanceof Uint8Array))throw new TypeError("Each image.data must be a Uint8Array.");if(typeof t.mimeType!="string")throw new TypeError("Each image.mimeType must be a string.");if(!["coverFront","coverBack","unknown"].includes(t.kind))throw new TypeError("Each image.kind must be 'coverFront', 'coverBack', or 'unknown'.")}}if(e.comment!==void 0&&typeof e.comment!="string")throw new TypeError("tags.comment, when provided, must be a string.");if(e.raw!==void 0){if(!e.raw||typeof e.raw!="object")throw new TypeError("tags.raw, when provided, must be an object.");for(const t of Object.values(e.raw))if(t!==null&&typeof t!="string"&&!(t instanceof Uint8Array)&&!(t instanceof Zn)&&!(t instanceof Ba))throw new TypeError("Each value in tags.raw must be a string, Uint8Array, RichImageData, AttachedFile, or null.")}},ga=e=>{if(!e||typeof e!="object")throw new TypeError("disposition must be an object.");if(e.default!==void 0&&typeof e.default!="boolean")throw new TypeError("disposition.default must be a boolean.");if(e.forced!==void 0&&typeof e.forced!="boolean")throw new TypeError("disposition.forced must be a boolean.");if(e.original!==void 0&&typeof e.original!="boolean")throw new TypeError("disposition.original must be a boolean.");if(e.commentary!==void 0&&typeof e.commentary!="boolean")throw new TypeError("disposition.commentary must be a boolean.");if(e.hearingImpaired!==void 0&&typeof e.hearingImpaired!="boolean")throw new TypeError("disposition.hearingImpaired must be a boolean.");if(e.visuallyImpaired!==void 0&&typeof e.visuallyImpaired!="boolean")throw new TypeError("disposition.visuallyImpaired must be a boolean.")};/*!
292
+ * Copyright (c) 2025-present, Vanilagy and contributors
293
+ *
294
+ * This Source Code Form is subject to the terms of the Mozilla Public
295
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
296
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/.
297
+ */const O0=["avc","hevc","vp9","av1","vp8"],k0=["pcm-s16","pcm-s16be","pcm-s24","pcm-s24be","pcm-s32","pcm-s32be","pcm-f32","pcm-f32be","pcm-f64","pcm-f64be","pcm-u8","pcm-s8","ulaw","alaw"],Xn=["aac","opus","mp3","vorbis","flac"],ui=[...Xn,...k0],hi=["webvtt"],Fa=e=>{const t=e.split("."),d=(1<<7)+1,o=Number(t[1]),u=t[2],h=Number(u.slice(0,-1)),S=(o<<5)+h,W=u.slice(-1)==="H"?1:0,Z=Number(t[3])===8?0:1,j=0,w=t[4]?Number(t[4]):0,A=t[5]?Number(t[5][0]):1,J=t[5]?Number(t[5][1]):1,P=t[5]?Number(t[5][2]):0,k=(W<<7)+(Z<<6)+(j<<5)+(w<<4)+(A<<3)+(J<<2)+P;return[d,S,k,0]},Ja=/^pcm-([usf])(\d+)+(be)?$/,D0=e=>{if(ve(k0.includes(e)),e==="ulaw")return{dataType:"ulaw",sampleSize:1,littleEndian:!0,silentValue:255};if(e==="alaw")return{dataType:"alaw",sampleSize:1,littleEndian:!0,silentValue:213};const t=Ja.exec(e);ve(t);let i;t[1]==="u"?i="unsigned":t[1]==="s"?i="signed":i="float";const n=Number(t[2])/8,d=t[3]!=="be",o=e==="pcm-u8"?2**7:0;return{dataType:i,sampleSize:n,littleEndian:d,silentValue:o}},Ea=["avc1","avc3","hev1","hvc1","vp8","vp09","av01"],Na=/^(avc1|avc3)\.[0-9a-fA-F]{6}$/,Pa=/^(hev1|hvc1)\.(?:[ABC]?\d+)\.[0-9a-fA-F]{1,8}\.[LH]\d+(?:\.[0-9a-fA-F]{1,2}){0,6}$/,Ua=/^vp09(?:\.\d{2}){3}(?:(?:\.\d{2}){5})?$/,Aa=/^av01\.\d\.\d{2}[MH]\.\d{2}(?:\.\d\.\d{3}\.\d{2}\.\d{2}\.\d{2}\.\d)?$/,za=e=>{if(!e)throw new TypeError("Video chunk metadata must be provided.");if(typeof e!="object")throw new TypeError("Video chunk metadata must be an object.");if(!e.decoderConfig)throw new TypeError("Video chunk metadata must include a decoder configuration.");if(typeof e.decoderConfig!="object")throw new TypeError("Video chunk metadata decoder configuration must be an object.");if(typeof e.decoderConfig.codec!="string")throw new TypeError("Video chunk metadata decoder configuration must specify a codec string.");if(!Ea.some(t=>e.decoderConfig.codec.startsWith(t)))throw new TypeError("Video chunk metadata decoder configuration codec string must be a valid video codec string as specified in the WebCodecs Codec Registry.");if(!Number.isInteger(e.decoderConfig.codedWidth)||e.decoderConfig.codedWidth<=0)throw new TypeError("Video chunk metadata decoder configuration must specify a valid codedWidth (positive integer).");if(!Number.isInteger(e.decoderConfig.codedHeight)||e.decoderConfig.codedHeight<=0)throw new TypeError("Video chunk metadata decoder configuration must specify a valid codedHeight (positive integer).");if(e.decoderConfig.description!==void 0&&!bn(e.decoderConfig.description))throw new TypeError("Video chunk metadata decoder configuration description, when defined, must be an ArrayBuffer or an ArrayBuffer view.");if(e.decoderConfig.colorSpace!==void 0){const{colorSpace:t}=e.decoderConfig;if(typeof t!="object")throw new TypeError("Video chunk metadata decoder configuration colorSpace, when provided, must be an object.");const i=Object.keys(qi);if(t.primaries!=null&&!i.includes(t.primaries))throw new TypeError(`Video chunk metadata decoder configuration colorSpace primaries, when defined, must be one of ${i.join(", ")}.`);const n=Object.keys(es);if(t.transfer!=null&&!n.includes(t.transfer))throw new TypeError(`Video chunk metadata decoder configuration colorSpace transfer, when defined, must be one of ${n.join(", ")}.`);const d=Object.keys(ts);if(t.matrix!=null&&!d.includes(t.matrix))throw new TypeError(`Video chunk metadata decoder configuration colorSpace matrix, when defined, must be one of ${d.join(", ")}.`);if(t.fullRange!=null&&typeof t.fullRange!="boolean")throw new TypeError("Video chunk metadata decoder configuration colorSpace fullRange, when defined, must be a boolean.")}if(e.decoderConfig.codec.startsWith("avc1")||e.decoderConfig.codec.startsWith("avc3")){if(!Na.test(e.decoderConfig.codec))throw new TypeError("Video chunk metadata decoder configuration codec string for AVC must be a valid AVC codec string as specified in Section 3.4 of RFC 6381.")}else if(e.decoderConfig.codec.startsWith("hev1")||e.decoderConfig.codec.startsWith("hvc1")){if(!Pa.test(e.decoderConfig.codec))throw new TypeError("Video chunk metadata decoder configuration codec string for HEVC must be a valid HEVC codec string as specified in Section E.3 of ISO 14496-15.")}else if(e.decoderConfig.codec.startsWith("vp8")){if(e.decoderConfig.codec!=="vp8")throw new TypeError('Video chunk metadata decoder configuration codec string for VP8 must be "vp8".')}else if(e.decoderConfig.codec.startsWith("vp09")){if(!Ua.test(e.decoderConfig.codec))throw new TypeError('Video chunk metadata decoder configuration codec string for VP9 must be a valid VP9 codec string as specified in Section "Codecs Parameter String" of https://www.webmproject.org/vp9/mp4/.')}else if(e.decoderConfig.codec.startsWith("av01")&&!Aa.test(e.decoderConfig.codec))throw new TypeError('Video chunk metadata decoder configuration codec string for AV1 must be a valid AV1 codec string as specified in Section "Codecs Parameter String" of https://aomediacodec.github.io/av1-isobmff/.')},Oa=["mp4a","mp3","opus","vorbis","flac","ulaw","alaw","pcm"],ja=e=>{if(!e)throw new TypeError("Audio chunk metadata must be provided.");if(typeof e!="object")throw new TypeError("Audio chunk metadata must be an object.");if(!e.decoderConfig)throw new TypeError("Audio chunk metadata must include a decoder configuration.");if(typeof e.decoderConfig!="object")throw new TypeError("Audio chunk metadata decoder configuration must be an object.");if(typeof e.decoderConfig.codec!="string")throw new TypeError("Audio chunk metadata decoder configuration must specify a codec string.");if(!Oa.some(t=>e.decoderConfig.codec.startsWith(t)))throw new TypeError("Audio chunk metadata decoder configuration codec string must be a valid audio codec string as specified in the WebCodecs Codec Registry.");if(!Number.isInteger(e.decoderConfig.sampleRate)||e.decoderConfig.sampleRate<=0)throw new TypeError("Audio chunk metadata decoder configuration must specify a valid sampleRate (positive integer).");if(!Number.isInteger(e.decoderConfig.numberOfChannels)||e.decoderConfig.numberOfChannels<=0)throw new TypeError("Audio chunk metadata decoder configuration must specify a valid numberOfChannels (positive integer).");if(e.decoderConfig.description!==void 0&&!bn(e.decoderConfig.description))throw new TypeError("Audio chunk metadata decoder configuration description, when defined, must be an ArrayBuffer or an ArrayBuffer view.");if(e.decoderConfig.codec.startsWith("mp4a")&&e.decoderConfig.codec!=="mp4a.69"&&e.decoderConfig.codec!=="mp4a.6B"&&e.decoderConfig.codec!=="mp4a.6b"){if(!["mp4a.40.2","mp4a.40.02","mp4a.40.5","mp4a.40.05","mp4a.40.29","mp4a.67"].includes(e.decoderConfig.codec))throw new TypeError("Audio chunk metadata decoder configuration codec string for AAC must be a valid AAC codec string as specified in https://www.w3.org/TR/webcodecs-aac-codec-registration/.");if(!e.decoderConfig.description)throw new TypeError("Audio chunk metadata decoder configuration for AAC must include a description, which is expected to be an AudioSpecificConfig as specified in ISO 14496-3.")}else if(e.decoderConfig.codec.startsWith("mp3")||e.decoderConfig.codec.startsWith("mp4a")){if(e.decoderConfig.codec!=="mp3"&&e.decoderConfig.codec!=="mp4a.69"&&e.decoderConfig.codec!=="mp4a.6B"&&e.decoderConfig.codec!=="mp4a.6b")throw new TypeError('Audio chunk metadata decoder configuration codec string for MP3 must be "mp3", "mp4a.69" or "mp4a.6B".')}else if(e.decoderConfig.codec.startsWith("opus")){if(e.decoderConfig.codec!=="opus")throw new TypeError('Audio chunk metadata decoder configuration codec string for Opus must be "opus".');if(e.decoderConfig.description&&e.decoderConfig.description.byteLength<18)throw new TypeError("Audio chunk metadata decoder configuration description, when specified, is expected to be an Identification Header as specified in Section 5.1 of RFC 7845.")}else if(e.decoderConfig.codec.startsWith("vorbis")){if(e.decoderConfig.codec!=="vorbis")throw new TypeError('Audio chunk metadata decoder configuration codec string for Vorbis must be "vorbis".');if(!e.decoderConfig.description)throw new TypeError("Audio chunk metadata decoder configuration for Vorbis must include a description, which is expected to adhere to the format described in https://www.w3.org/TR/webcodecs-vorbis-codec-registration/.")}else if(e.decoderConfig.codec.startsWith("flac")){if(e.decoderConfig.codec!=="flac")throw new TypeError('Audio chunk metadata decoder configuration codec string for FLAC must be "flac".');if(!e.decoderConfig.description||e.decoderConfig.description.byteLength<42)throw new TypeError("Audio chunk metadata decoder configuration for FLAC must include a description, which is expected to adhere to the format described in https://www.w3.org/TR/webcodecs-flac-codec-registration/.")}else if((e.decoderConfig.codec.startsWith("pcm")||e.decoderConfig.codec.startsWith("ulaw")||e.decoderConfig.codec.startsWith("alaw"))&&!k0.includes(e.decoderConfig.codec))throw new TypeError(`Audio chunk metadata decoder configuration codec string for PCM must be one of the supported PCM codecs (${k0.join(", ")}).`)},Qa=e=>{if(!e)throw new TypeError("Subtitle metadata must be provided.");if(typeof e!="object")throw new TypeError("Subtitle metadata must be an object.");if(!e.config)throw new TypeError("Subtitle metadata must include a config object.");if(typeof e.config!="object")throw new TypeError("Subtitle metadata config must be an object.");if(typeof e.config.description!="string")throw new TypeError("Subtitle metadata config description must be a string.")};/*!
298
+ * Copyright (c) 2025-present, Vanilagy and contributors
299
+ *
300
+ * This Source Code Form is subject to the terms of the Mozilla Public
301
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
302
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/.
303
+ */class Da{constructor(t){this.mutex=new pn,this.firstMediaStreamTimestamp=null,this.trackTimestampInfo=new WeakMap,this.output=t}onTrackClose(t){}validateAndNormalizeTimestamp(t,i,n){i+=t.source._timestampOffset;let d=this.trackTimestampInfo.get(t);if(!d){if(!n)throw new Error("First packet must be a key packet.");d={maxTimestamp:i,maxTimestampBeforeLastKeyPacket:i},this.trackTimestampInfo.set(t,d)}if(i<0)throw new Error(`Timestamps must be non-negative (got ${i}s).`);if(n&&(d.maxTimestampBeforeLastKeyPacket=d.maxTimestamp),i<d.maxTimestampBeforeLastKeyPacket)throw new Error(`Timestamps cannot be smaller than the largest timestamp of the previous GOP (a GOP begins with a key packet and ends right before the next key packet). Got ${i}s, but largest timestamp is ${d.maxTimestampBeforeLastKeyPacket}s.`);return d.maxTimestamp=Math.max(d.maxTimestamp,i),i}}/*!
304
+ * Copyright (c) 2025-present, Vanilagy and contributors
305
+ *
306
+ * This Source Code Form is subject to the terms of the Mozilla Public
307
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
308
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/.
309
+ */var A0;(function(e){e[e.IDR=5]="IDR",e[e.SEI=6]="SEI",e[e.SPS=7]="SPS",e[e.PPS=8]="PPS",e[e.SPS_EXT=13]="SPS_EXT"})(A0||(A0={}));var Dt;(function(e){e[e.RASL_N=8]="RASL_N",e[e.RASL_R=9]="RASL_R",e[e.BLA_W_LP=16]="BLA_W_LP",e[e.RSV_IRAP_VCL23=23]="RSV_IRAP_VCL23",e[e.VPS_NUT=32]="VPS_NUT",e[e.SPS_NUT=33]="SPS_NUT",e[e.PPS_NUT=34]="PPS_NUT",e[e.PREFIX_SEI_NUT=39]="PREFIX_SEI_NUT",e[e.SUFFIX_SEI_NUT=40]="SUFFIX_SEI_NUT"})(Dt||(Dt={}));const is=e=>{const t=[];let i=0;for(;i<e.length;){let n=-1,d=0;for(let o=i;o<e.length-3;o++){if(e[o]===0&&e[o+1]===0&&e[o+2]===1){n=o,d=3;break}if(o<e.length-4&&e[o]===0&&e[o+1]===0&&e[o+2]===0&&e[o+3]===1){n=o,d=4;break}}if(n===-1)break;if(i>0&&n>i){const o=e.subarray(i,n);o.length>0&&t.push(o)}i=n+d}if(i<e.length){const n=e.subarray(i);n.length>0&&t.push(n)}return t},ji=e=>{const t=[],i=e.length;for(let n=0;n<i;n++)n+2<i&&e[n]===0&&e[n+1]===0&&e[n+2]===3?(t.push(0,0),n+=2):t.push(e[n]);return new Uint8Array(t)},$a=(e,t)=>{const i=e.reduce((o,u)=>o+t+u.byteLength,0),n=new Uint8Array(i);let d=0;for(const o of e){const u=new DataView(n.buffer,n.byteOffset,n.byteLength);switch(t){case 1:u.setUint8(d,o.byteLength);break;case 2:u.setUint16(d,o.byteLength,!1);break;case 3:Ya(u,d,o.byteLength);break;case 4:u.setUint32(d,o.byteLength,!1);break}d+=t,n.set(o,d),d+=o.byteLength}return n},gi=e=>e[0]&31,qa=e=>{try{const t=is(e),i=t.filter(S=>gi(S)===A0.SPS),n=t.filter(S=>gi(S)===A0.PPS),d=t.filter(S=>gi(S)===A0.SPS_EXT);if(i.length===0||n.length===0)return null;const o=i[0],u=tl(o);ve(u!==null);const h=u.profileIdc===100||u.profileIdc===110||u.profileIdc===122||u.profileIdc===144;return{configurationVersion:1,avcProfileIndication:u.profileIdc,profileCompatibility:u.constraintFlags,avcLevelIndication:u.levelIdc,lengthSizeMinusOne:3,sequenceParameterSets:i,pictureParameterSets:n,chromaFormat:h?u.chromaFormatIdc:null,bitDepthLumaMinus8:h?u.bitDepthLumaMinus8:null,bitDepthChromaMinus8:h?u.bitDepthChromaMinus8:null,sequenceParameterSetExt:h?d:null}}catch(t){return console.error("Error building AVC Decoder Configuration Record:",t),null}},el=e=>{const t=[];t.push(e.configurationVersion),t.push(e.avcProfileIndication),t.push(e.profileCompatibility),t.push(e.avcLevelIndication),t.push(252|e.lengthSizeMinusOne&3),t.push(224|e.sequenceParameterSets.length&31);for(const i of e.sequenceParameterSets){const n=i.byteLength;t.push(n>>8),t.push(n&255);for(let d=0;d<n;d++)t.push(i[d])}t.push(e.pictureParameterSets.length);for(const i of e.pictureParameterSets){const n=i.byteLength;t.push(n>>8),t.push(n&255);for(let d=0;d<n;d++)t.push(i[d])}if(e.avcProfileIndication===100||e.avcProfileIndication===110||e.avcProfileIndication===122||e.avcProfileIndication===144){ve(e.chromaFormat!==null),ve(e.bitDepthLumaMinus8!==null),ve(e.bitDepthChromaMinus8!==null),ve(e.sequenceParameterSetExt!==null),t.push(252|e.chromaFormat&3),t.push(248|e.bitDepthLumaMinus8&7),t.push(248|e.bitDepthChromaMinus8&7),t.push(e.sequenceParameterSetExt.length);for(const i of e.sequenceParameterSetExt){const n=i.byteLength;t.push(n>>8),t.push(n&255);for(let d=0;d<n;d++)t.push(i[d])}}return new Uint8Array(t)},tl=e=>{try{const t=new z0(ji(e));if(t.skipBits(1),t.skipBits(2),t.readBits(5)!==7)return null;const n=t.readAlignedByte(),d=t.readAlignedByte(),o=t.readAlignedByte();ye(t);let u=null,h=null,S=null;if((n===100||n===110||n===122||n===244||n===44||n===83||n===86||n===118||n===128)&&(u=ye(t),u===3&&t.skipBits(1),h=ye(t),S=ye(t),t.skipBits(1),t.readBits(1))){for(let j=0;j<(u!==3?8:12);j++)if(t.readBits(1)){const A=j<6?16:64;let J=8,P=8;for(let k=0;k<A;k++){if(P!==0){const v=s0(t);P=(J+v+256)%256}J=P===0?J:P}}}ye(t);const W=ye(t);if(W===0)ye(t);else if(W===1){t.skipBits(1),s0(t),s0(t);const Z=ye(t);for(let j=0;j<Z;j++)s0(t)}ye(t),t.skipBits(1),ye(t),ye(t);const I=t.readBits(1);return{profileIdc:n,constraintFlags:d,levelIdc:o,frameMbsOnlyFlag:I,chromaFormatIdc:u,bitDepthLumaMinus8:h,bitDepthChromaMinus8:S}}catch(t){return console.error("Error parsing AVC SPS:",t),null}},H0=e=>e[0]>>1&63,il=e=>{try{const t=is(e),i=t.filter(m=>H0(m)===Dt.VPS_NUT),n=t.filter(m=>H0(m)===Dt.SPS_NUT),d=t.filter(m=>H0(m)===Dt.PPS_NUT),o=t.filter(m=>H0(m)===Dt.PREFIX_SEI_NUT||H0(m)===Dt.SUFFIX_SEI_NUT);if(n.length===0||d.length===0)return null;const u=n[0],h=new z0(ji(u));h.skipBits(16),h.readBits(4);const S=h.readBits(3),W=h.readBits(1),{general_profile_space:I,general_tier_flag:Z,general_profile_idc:j,general_profile_compatibility_flags:w,general_constraint_indicator_flags:A,general_level_idc:J}=sl(h,S);ye(h);const P=ye(h);P===3&&h.skipBits(1),ye(h),ye(h),h.readBits(1)&&(ye(h),ye(h),ye(h),ye(h));const k=ye(h),v=ye(h);ye(h);const K=h.readBits(1)?0:S;for(let m=K;m<=S;m++)ye(h),ye(h),ye(h);ye(h),ye(h),ye(h),ye(h),ye(h),ye(h),h.readBits(1)&&h.readBits(1)&&nl(h),h.skipBits(1),h.skipBits(1),h.readBits(1)&&(h.skipBits(4),h.skipBits(4),ye(h),ye(h),h.skipBits(1));const X=ye(h);if(rl(h,X),h.readBits(1)){const m=ye(h);for(let l=0;l<m;l++)ye(h),h.skipBits(1)}h.skipBits(1),h.skipBits(1);let z=0;h.readBits(1)&&(z=ll(h,S));let T=0;if(d.length>0){const m=d[0],l=new z0(ji(m));l.skipBits(16),ye(l),ye(l),l.skipBits(1),l.skipBits(1),l.skipBits(3),l.skipBits(1),l.skipBits(1),ye(l),ye(l),s0(l),l.skipBits(1),l.skipBits(1),l.readBits(1)&&ye(l),s0(l),s0(l),l.skipBits(1),l.skipBits(1),l.skipBits(1),l.skipBits(1);const s=l.readBits(1),V=l.readBits(1);!s&&!V?T=0:s&&!V?T=2:!s&&V?T=3:T=0}const H=[...i.length?[{arrayCompleteness:1,nalUnitType:Dt.VPS_NUT,nalUnits:i}]:[],...n.length?[{arrayCompleteness:1,nalUnitType:Dt.SPS_NUT,nalUnits:n}]:[],...d.length?[{arrayCompleteness:1,nalUnitType:Dt.PPS_NUT,nalUnits:d}]:[],...o.length?[{arrayCompleteness:1,nalUnitType:H0(o[0]),nalUnits:o}]:[]];return{configurationVersion:1,generalProfileSpace:I,generalTierFlag:Z,generalProfileIdc:j,generalProfileCompatibilityFlags:w,generalConstraintIndicatorFlags:A,generalLevelIdc:J,minSpatialSegmentationIdc:z,parallelismType:T,chromaFormatIdc:P,bitDepthLumaMinus8:k,bitDepthChromaMinus8:v,avgFrameRate:0,constantFrameRate:0,numTemporalLayers:S+1,temporalIdNested:W,lengthSizeMinusOne:3,arrays:H}}catch(t){return console.error("Error building HEVC Decoder Configuration Record:",t),null}},sl=(e,t)=>{const i=e.readBits(2),n=e.readBits(1),d=e.readBits(5);let o=0;for(let I=0;I<32;I++)o=o<<1|e.readBits(1);const u=new Uint8Array(6);for(let I=0;I<6;I++)u[I]=e.readBits(8);const h=e.readBits(8),S=[],W=[];for(let I=0;I<t;I++)S.push(e.readBits(1)),W.push(e.readBits(1));if(t>0)for(let I=t;I<8;I++)e.skipBits(2);for(let I=0;I<t;I++)S[I]&&e.skipBits(88),W[I]&&e.skipBits(8);return{general_profile_space:i,general_tier_flag:n,general_profile_idc:d,general_profile_compatibility_flags:o,general_constraint_indicator_flags:u,general_level_idc:h}},nl=e=>{for(let t=0;t<4;t++)for(let i=0;i<(t===3?2:6);i++)if(!e.readBits(1))ye(e);else{const d=Math.min(64,1<<4+(t<<1));t>1&&s0(e);for(let o=0;o<d;o++)s0(e)}},rl=(e,t)=>{const i=[];for(let n=0;n<t;n++)i[n]=al(e,n,t,i)},al=(e,t,i,n)=>{let d=0,o=0,u=0;if(t!==0&&(o=e.readBits(1)),o){if(t===i){const S=ye(e);u=t-(S+1)}else u=t-1;e.readBits(1),ye(e);const h=n[u]??0;for(let S=0;S<=h;S++)e.readBits(1)||e.readBits(1);d=n[u]}else{const h=ye(e),S=ye(e);for(let W=0;W<h;W++)ye(e),e.readBits(1);for(let W=0;W<S;W++)ye(e),e.readBits(1);d=h+S}return d},ll=(e,t)=>{if(e.readBits(1)&&e.readBits(8)===255&&(e.readBits(16),e.readBits(16)),e.readBits(1)&&e.readBits(1),e.readBits(1)&&(e.readBits(3),e.readBits(1),e.readBits(1)&&(e.readBits(8),e.readBits(8),e.readBits(8))),e.readBits(1)&&(ye(e),ye(e)),e.readBits(1),e.readBits(1),e.readBits(1),e.readBits(1)&&(ye(e),ye(e),ye(e),ye(e)),e.readBits(1)&&(e.readBits(32),e.readBits(32),e.readBits(1)&&ye(e),e.readBits(1)&&ol(e,!0,t)),e.readBits(1)){e.readBits(1),e.readBits(1),e.readBits(1);const i=ye(e);return ye(e),ye(e),ye(e),ye(e),i}return 0},ol=(e,t,i)=>{let n=!1,d=!1,o=!1;n=e.readBits(1)===1,d=e.readBits(1)===1,(n||d)&&(o=e.readBits(1)===1,o&&(e.readBits(8),e.readBits(5),e.readBits(1),e.readBits(5)),e.readBits(4),e.readBits(4),o&&e.readBits(4),e.readBits(5),e.readBits(5),e.readBits(5));for(let u=0;u<=i;u++){const h=e.readBits(1)===1;let S=!0;h||(S=e.readBits(1)===1);let W=!1;S?ye(e):W=e.readBits(1)===1;let I=1;W||(I=ye(e)+1),n&&Cs(e,I,o),d&&Cs(e,I,o)}},Cs=(e,t,i)=>{for(let n=0;n<t;n++)ye(e),ye(e),i&&(ye(e),ye(e)),e.readBits(1)},cl=e=>{const t=[];t.push(e.configurationVersion),t.push((e.generalProfileSpace&3)<<6|(e.generalTierFlag&1)<<5|e.generalProfileIdc&31),t.push(e.generalProfileCompatibilityFlags>>>24&255),t.push(e.generalProfileCompatibilityFlags>>>16&255),t.push(e.generalProfileCompatibilityFlags>>>8&255),t.push(e.generalProfileCompatibilityFlags&255),t.push(...e.generalConstraintIndicatorFlags),t.push(e.generalLevelIdc&255),t.push(240|e.minSpatialSegmentationIdc>>8&15),t.push(e.minSpatialSegmentationIdc&255),t.push(252|e.parallelismType&3),t.push(252|e.chromaFormatIdc&3),t.push(248|e.bitDepthLumaMinus8&7),t.push(248|e.bitDepthChromaMinus8&7),t.push(e.avgFrameRate>>8&255),t.push(e.avgFrameRate&255),t.push((e.constantFrameRate&3)<<6|(e.numTemporalLayers&7)<<3|(e.temporalIdNested&1)<<2|e.lengthSizeMinusOne&3),t.push(e.arrays.length&255);for(const i of e.arrays){t.push((i.arrayCompleteness&1)<<7|0|i.nalUnitType&63),t.push(i.nalUnits.length>>8&255),t.push(i.nalUnits.length&255);for(const n of i.nalUnits){t.push(n.length>>8&255),t.push(n.length&255);for(let d=0;d<n.length;d++)t.push(n[d])}}return new Uint8Array(t)},dl=e=>{const t=La(e),i=t.getUint8(9),n=t.getUint16(10,!0),d=t.getUint32(12,!0),o=t.getInt16(16,!0),u=t.getUint8(18);let h=null;return u&&(h=e.subarray(19,21+i)),{outputChannelCount:i,preSkip:n,inputSampleRate:d,outputGain:o,channelMappingFamily:u,channelMappingTable:h}};var gs;(function(e){e[e.STREAMINFO=0]="STREAMINFO",e[e.VORBIS_COMMENT=4]="VORBIS_COMMENT",e[e.PICTURE=6]="PICTURE"})(gs||(gs={}));/*!
310
+ * Copyright (c) 2025-present, Vanilagy and contributors
311
+ *
312
+ * This Source Code Form is subject to the terms of the Mozilla Public
313
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
314
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/.
315
+ */const Fs=new Uint8Array(0);class B0{constructor(t,i,n,d,o=-1,u,h){if(this.data=t,this.type=i,this.timestamp=n,this.duration=d,this.sequenceNumber=o,t===Fs&&u===void 0)throw new Error("Internal error: byteLength must be explicitly provided when constructing metadata-only packets.");if(u===void 0&&(u=t.byteLength),!(t instanceof Uint8Array))throw new TypeError("data must be a Uint8Array.");if(i!=="key"&&i!=="delta")throw new TypeError('type must be either "key" or "delta".');if(!Number.isFinite(n))throw new TypeError("timestamp must be a number.");if(!Number.isFinite(d)||d<0)throw new TypeError("duration must be a non-negative number.");if(!Number.isFinite(o))throw new TypeError("sequenceNumber must be a number.");if(!Number.isInteger(u)||u<0)throw new TypeError("byteLength must be a non-negative integer.");if(h!==void 0&&(typeof h!="object"||!h))throw new TypeError("sideData, when provided, must be an object.");if((h==null?void 0:h.alpha)!==void 0&&!(h.alpha instanceof Uint8Array))throw new TypeError("sideData.alpha, when provided, must be a Uint8Array.");if((h==null?void 0:h.alphaByteLength)!==void 0&&(!Number.isInteger(h.alphaByteLength)||h.alphaByteLength<0))throw new TypeError("sideData.alphaByteLength, when provided, must be a non-negative integer.");this.byteLength=u,this.sideData=h??{},this.sideData.alpha&&this.sideData.alphaByteLength===void 0&&(this.sideData.alphaByteLength=this.sideData.alpha.byteLength)}get isMetadataOnly(){return this.data===Fs}get microsecondTimestamp(){return Math.trunc(Bs*this.timestamp)}get microsecondDuration(){return Math.trunc(Bs*this.duration)}toEncodedVideoChunk(){if(this.isMetadataOnly)throw new TypeError("Metadata-only packets cannot be converted to a video chunk.");if(typeof EncodedVideoChunk>"u")throw new Error("Your browser does not support EncodedVideoChunk.");return new EncodedVideoChunk({data:this.data,type:this.type,timestamp:this.microsecondTimestamp,duration:this.microsecondDuration})}alphaToEncodedVideoChunk(t=this.type){if(!this.sideData.alpha)throw new TypeError("This packet does not contain alpha side data.");if(this.isMetadataOnly)throw new TypeError("Metadata-only packets cannot be converted to a video chunk.");if(typeof EncodedVideoChunk>"u")throw new Error("Your browser does not support EncodedVideoChunk.");return new EncodedVideoChunk({data:this.sideData.alpha,type:t,timestamp:this.microsecondTimestamp,duration:this.microsecondDuration})}toEncodedAudioChunk(){if(this.isMetadataOnly)throw new TypeError("Metadata-only packets cannot be converted to an audio chunk.");if(typeof EncodedAudioChunk>"u")throw new Error("Your browser does not support EncodedAudioChunk.");return new EncodedAudioChunk({data:this.data,type:this.type,timestamp:this.microsecondTimestamp,duration:this.microsecondDuration})}static fromEncodedChunk(t,i){if(!(t instanceof EncodedVideoChunk||t instanceof EncodedAudioChunk))throw new TypeError("chunk must be an EncodedVideoChunk or EncodedAudioChunk.");const n=new Uint8Array(t.byteLength);return t.copyTo(n),new B0(n,t.type,t.timestamp/1e6,(t.duration??0)/1e6,void 0,void 0,i)}clone(t){if(t!==void 0&&(typeof t!="object"||t===null))throw new TypeError("options, when provided, must be an object.");if((t==null?void 0:t.timestamp)!==void 0&&!Number.isFinite(t.timestamp))throw new TypeError("options.timestamp, when provided, must be a number.");if((t==null?void 0:t.duration)!==void 0&&!Number.isFinite(t.duration))throw new TypeError("options.duration, when provided, must be a number.");return new B0(this.data,this.type,(t==null?void 0:t.timestamp)??this.timestamp,(t==null?void 0:t.duration)??this.duration,this.sequenceNumber,this.byteLength)}}/*!
316
+ * Copyright (c) 2025-present, Vanilagy and contributors
317
+ *
318
+ * This Source Code Form is subject to the terms of the Mozilla Public
319
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
320
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/.
321
+ */const ml=e=>{let i=(e.hasVideo?"video/":e.hasAudio?"audio/":"application/")+(e.isQuickTime?"quicktime":"mp4");if(e.codecStrings.length>0){const n=[...new Set(e.codecStrings)];i+=`; codecs="${n.join(", ")}"`}return i};/*!
322
+ * Copyright (c) 2025-present, Vanilagy and contributors
323
+ *
324
+ * This Source Code Form is subject to the terms of the Mozilla Public
325
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
326
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/.
327
+ */const Fi=8,Js=16;/*!
328
+ * Copyright (c) 2025-present, Vanilagy and contributors
329
+ *
330
+ * This Source Code Form is subject to the terms of the Mozilla Public
331
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
332
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/.
333
+ */const Es=/<(?:(\d{2}):)?(\d{2}):(\d{2}).(\d{3})>/g,ul=e=>{const t=Math.floor(e/36e5),i=Math.floor(e%(60*60*1e3)/(60*1e3)),n=Math.floor(e%(60*1e3)/1e3),d=e%1e3;return t.toString().padStart(2,"0")+":"+i.toString().padStart(2,"0")+":"+n.toString().padStart(2,"0")+"."+d.toString().padStart(3,"0")};/*!
334
+ * Copyright (c) 2025-present, Vanilagy and contributors
335
+ *
336
+ * This Source Code Form is subject to the terms of the Mozilla Public
337
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
338
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/.
339
+ */class Ns{constructor(t){this.writer=t,this.helper=new Uint8Array(8),this.helperView=new DataView(this.helper.buffer),this.offsets=new WeakMap}writeU32(t){this.helperView.setUint32(0,t,!1),this.writer.write(this.helper.subarray(0,4))}writeU64(t){this.helperView.setUint32(0,Math.floor(t/2**32),!1),this.helperView.setUint32(4,t,!1),this.writer.write(this.helper.subarray(0,8))}writeAscii(t){for(let i=0;i<t.length;i++)this.helperView.setUint8(i%8,t.charCodeAt(i)),i%8===7&&this.writer.write(this.helper);t.length%8!==0&&this.writer.write(this.helper.subarray(0,t.length%8))}writeBox(t){if(this.offsets.set(t,this.writer.getPos()),t.contents&&!t.children)this.writeBoxHeader(t,t.size??t.contents.byteLength+8),this.writer.write(t.contents);else{const i=this.writer.getPos();if(this.writeBoxHeader(t,0),t.contents&&this.writer.write(t.contents),t.children)for(const o of t.children)o&&this.writeBox(o);const n=this.writer.getPos(),d=t.size??n-i;this.writer.seek(i),this.writeBoxHeader(t,d),this.writer.seek(n)}}writeBoxHeader(t,i){this.writeU32(t.largeSize?1:i),this.writeAscii(t.type),t.largeSize&&this.writeU64(i)}measureBoxHeader(t){return 8+(t.largeSize?8:0)}patchBox(t){const i=this.offsets.get(t);ve(i!==void 0);const n=this.writer.getPos();this.writer.seek(i),this.writeBox(t),this.writer.seek(n)}measureBox(t){if(t.contents&&!t.children)return this.measureBoxHeader(t)+t.contents.byteLength;{let i=this.measureBoxHeader(t);if(t.contents&&(i+=t.contents.byteLength),t.children)for(const n of t.children)n&&(i+=this.measureBox(n));return i}}}const He=new Uint8Array(8),qt=new DataView(He.buffer),Ue=e=>[(e%256+256)%256],Ge=e=>(qt.setUint16(0,e,!1),[He[0],He[1]]),_n=e=>(qt.setInt16(0,e,!1),[He[0],He[1]]),Gn=e=>(qt.setUint32(0,e,!1),[He[1],He[2],He[3]]),me=e=>(qt.setUint32(0,e,!1),[He[0],He[1],He[2],He[3]]),d0=e=>(qt.setInt32(0,e,!1),[He[0],He[1],He[2],He[3]]),V0=e=>(qt.setUint32(0,Math.floor(e/2**32),!1),qt.setUint32(4,e,!1),[He[0],He[1],He[2],He[3],He[4],He[5],He[6],He[7]]),Sn=e=>(qt.setInt16(0,2**8*e,!1),[He[0],He[1]]),i0=e=>(qt.setInt32(0,2**16*e,!1),[He[0],He[1],He[2],He[3]]),Ji=e=>(qt.setInt32(0,2**30*e,!1),[He[0],He[1],He[2],He[3]]),Ei=(e,t)=>{const i=[];let n=e;do{let d=n&127;n>>=7,i.length>0&&(d|=128),i.push(d)}while(n>0||t);return i.reverse()},at=(e,t=!1)=>{const i=Array(e.length).fill(null).map((n,d)=>e.charCodeAt(d));return t&&i.push(0),i},ss=e=>{let t=null;for(const i of e)(!t||i.timestamp>t.timestamp)&&(t=i);return t},vn=e=>{const t=e*(Math.PI/180),i=Math.round(Math.cos(t)),n=Math.round(Math.sin(t));return[i,n,0,-n,i,0,0,0,1]},In=vn(0),Vn=e=>[i0(e[0]),i0(e[1]),Ji(e[2]),i0(e[3]),i0(e[4]),Ji(e[5]),i0(e[6]),i0(e[7]),Ji(e[8])],Se=(e,t,i)=>({type:e,contents:t&&new Uint8Array(t.flat(10)),children:i}),Ye=(e,t,i,n,d)=>Se(e,[Ue(t),Gn(i),n??[]],d),hl=e=>e.isQuickTime?Se("ftyp",[at("qt "),me(512),at("qt ")]):e.fragmented?Se("ftyp",[at("iso5"),me(512),at("iso5"),at("iso6"),at("mp41")]):Se("ftyp",[at("isom"),me(512),at("isom"),e.holdsAvc?at("avc1"):[],at("mp41")]),ci=e=>({type:"mdat",largeSize:e}),bl=e=>({type:"free",size:e}),U0=e=>Se("moov",void 0,[pl(e.creationTime,e.trackDatas),...e.trackDatas.map(t=>yl(t,e.creationTime)),e.isFragmented?Dl(e.trackDatas):null,d1(e)]),pl=(e,t)=>{const i=tt(Math.max(0,...t.filter(u=>u.samples.length>0).map(u=>{const h=ss(u.samples);return h.timestamp+h.duration})),Qi),n=Math.max(0,...t.map(u=>u.track.id))+1,d=!M0(e)||!M0(i),o=d?V0:me;return Ye("mvhd",+d,0,[o(e),o(e),me(Qi),o(i),i0(1),Sn(1),Array(10).fill(0),Vn(In),Array(24).fill(0),me(n)])},yl=(e,t)=>{const i=G1(e);return Se("trak",void 0,[fl(e,t),Zl(e,t),i.name!==void 0?Se("udta",void 0,[Se("name",[...$t.encode(i.name)])]):null])},fl=(e,t)=>{var S;const i=ss(e.samples),n=tt(i?i.timestamp+i.duration:0,Qi),d=!M0(t)||!M0(n),o=d?V0:me;let u;if(e.type==="video"){const W=e.track.metadata.rotation;u=vn(W??0)}else u=In;let h=2;return((S=e.track.metadata.disposition)==null?void 0:S.default)!==!1&&(h|=1),Ye("tkhd",+d,h,[o(t),o(t),me(e.track.id),me(0),o(n),Array(8).fill(0),Ge(0),Ge(e.track.id),Sn(e.type==="audio"?1:0),Ge(0),Vn(u),i0(e.type==="video"?e.info.width:0),i0(e.type==="video"?e.info.height:0)])},Zl=(e,t)=>Se("mdia",void 0,[Xl(e,t),ns(!0,_l[e.type],Gl[e.type]),Sl(e)]),Xl=(e,t)=>{const i=ss(e.samples),n=tt(i?i.timestamp+i.duration:0,e.timescale),d=!M0(t)||!M0(n),o=d?V0:me;return Ye("mdhd",+d,0,[o(t),o(t),me(e.timescale),o(n),Ge(Ln(e.track.metadata.languageCode??wa)),Ge(0)])},_l={video:"vide",audio:"soun",subtitle:"text"},Gl={video:"MediabunnyVideoHandler",audio:"MediabunnySoundHandler",subtitle:"MediabunnyTextHandler"},ns=(e,t,i,n="\0\0\0\0")=>Ye("hdlr",0,0,[e?at("mhlr"):me(0),at(t),at(n),me(0),me(0),at(i,!0)]),Sl=e=>Se("minf",void 0,[Rl[e.type](),Tl(),xl(e)]),vl=()=>Ye("vmhd",0,1,[Ge(0),Ge(0),Ge(0),Ge(0)]),Il=()=>Ye("smhd",0,0,[Ge(0),Ge(0)]),Vl=()=>Ye("nmhd",0,0),Rl={video:vl,audio:Il,subtitle:Vl},Tl=()=>Se("dinf",void 0,[Wl()]),Wl=()=>Ye("dref",0,0,[me(1)],[Ll()]),Ll=()=>Ye("url ",0,1),xl=e=>{const t=e.compositionTimeOffsetTable.length>1||e.compositionTimeOffsetTable.some(i=>i.sampleCompositionTimeOffset!==0);return Se("stbl",void 0,[Hl(e),Pl(e),t?jl(e):null,t?Ql(e):null,Al(e),zl(e),Ol(e),Ul(e)])},Hl=e=>{let t;if(e.type==="video")t=Yl(b1(e.track.source._codec,e.info.decoderConfig.codec),e);else if(e.type==="audio"){const i=Wn(e.track.source._codec,e.muxer.isQuickTime);ve(i),t=Bl(i,e)}else e.type==="subtitle"&&(t=El(f1[e.track.source._codec],e));return ve(t),Ye("stsd",0,0,[me(1)],[t])},Yl=(e,t)=>Se(e,[Array(6).fill(0),Ge(1),Ge(0),Ge(0),Array(12).fill(0),Ge(t.info.width),Ge(t.info.height),me(4718592),me(4718592),me(0),Ge(1),Array(32).fill(0),Ge(24),_n(65535)],[p1[t.track.source._codec](t),xa(t.info.decoderConfig.colorSpace)?wl(t):null]),wl=e=>Se("colr",[at("nclx"),Ge(qi[e.info.decoderConfig.colorSpace.primaries]),Ge(es[e.info.decoderConfig.colorSpace.transfer]),Ge(ts[e.info.decoderConfig.colorSpace.matrix]),Ue((e.info.decoderConfig.colorSpace.fullRange?1:0)<<7)]),Kl=e=>e.info.decoderConfig&&Se("avcC",[...Q0(e.info.decoderConfig.description)]),Ml=e=>e.info.decoderConfig&&Se("hvcC",[...Q0(e.info.decoderConfig.description)]),Ps=e=>{var j,w,A,J;if(!e.info.decoderConfig)return null;const t=e.info.decoderConfig,i=t.codec.split("."),n=Number(i[1]),d=Number(i[2]),o=Number(i[3]),u=i[4]?Number(i[4]):1,h=i[8]?Number(i[8]):Number(((j=t.colorSpace)==null?void 0:j.fullRange)??0),S=(o<<4)+(u<<1)+h,W=i[5]?Number(i[5]):(w=t.colorSpace)!=null&&w.primaries?qi[t.colorSpace.primaries]:2,I=i[6]?Number(i[6]):(A=t.colorSpace)!=null&&A.transfer?es[t.colorSpace.transfer]:2,Z=i[7]?Number(i[7]):(J=t.colorSpace)!=null&&J.matrix?ts[t.colorSpace.matrix]:2;return Ye("vpcC",1,0,[Ue(n),Ue(d),Ue(S),Ue(W),Ue(I),Ue(Z),Ge(0)])},kl=e=>Se("av1C",Fa(e.info.decoderConfig.codec)),Bl=(e,t)=>{var o;let i=0,n,d=16;if(k0.includes(t.track.source._codec)){const u=t.track.source._codec,{sampleSize:h}=D0(u);d=8*h,d>16&&(i=1)}return i===0?n=[Array(6).fill(0),Ge(1),Ge(i),Ge(0),me(0),Ge(t.info.numberOfChannels),Ge(d),Ge(0),Ge(0),Ge(t.info.sampleRate<2**16?t.info.sampleRate:0),Ge(0)]:n=[Array(6).fill(0),Ge(1),Ge(i),Ge(0),me(0),Ge(t.info.numberOfChannels),Ge(Math.min(d,16)),Ge(0),Ge(0),Ge(t.info.sampleRate<2**16?t.info.sampleRate:0),Ge(0),me(1),me(d/8),me(t.info.numberOfChannels*d/8),me(2)],Se(e,n,[((o=y1(t.track.source._codec,t.muxer.isQuickTime))==null?void 0:o(t))??null])},Ni=e=>{let t;switch(e.track.source._codec){case"aac":t=64;break;case"mp3":t=107;break;case"vorbis":t=221;break;default:throw new Error(`Unhandled audio codec: ${e.track.source._codec}`)}let i=[...Ue(t),...Ue(21),...Gn(0),...me(0),...me(0)];if(e.info.decoderConfig.description){const n=Q0(e.info.decoderConfig.description);i=[...i,...Ue(5),...Ei(n.byteLength),...n]}return i=[...Ge(1),...Ue(0),...Ue(4),...Ei(i.length),...i,...Ue(6),...Ue(1),...Ue(2)],i=[...Ue(3),...Ei(i.length),...i],Ye("esds",0,0,i)},c0=e=>Se("wave",void 0,[Cl(e),gl(e),Se("\0\0\0\0")]),Cl=e=>Se("frma",[at(Wn(e.track.source._codec,e.muxer.isQuickTime))]),gl=e=>{const{littleEndian:t}=D0(e.track.source._codec);return Se("enda",[Ge(+t)])},Fl=e=>{var S;let t=e.info.numberOfChannels,i=3840,n=e.info.sampleRate,d=0,o=0,u=new Uint8Array(0);const h=(S=e.info.decoderConfig)==null?void 0:S.description;if(h){ve(h.byteLength>=18);const W=Q0(h),I=dl(W);t=I.outputChannelCount,i=I.preSkip,n=I.inputSampleRate,d=I.outputGain,o=I.channelMappingFamily,I.channelMappingTable&&(u=I.channelMappingTable)}return Se("dOps",[Ue(0),Ue(t),Ge(i),me(n),_n(d),Ue(o),...u])},Jl=e=>{var n;const t=(n=e.info.decoderConfig)==null?void 0:n.description;ve(t);const i=Q0(t);return Ye("dfLa",0,0,[...i.subarray(4)])},jt=e=>{const{littleEndian:t,sampleSize:i}=D0(e.track.source._codec),n=+t;return Ye("pcmC",0,0,[Ue(n),Ue(8*i)])},El=(e,t)=>Se(e,[Array(6).fill(0),Ge(1)],[Z1[t.track.source._codec](t)]),Nl=e=>Se("vttC",[...$t.encode(e.info.config.description)]),Pl=e=>Ye("stts",0,0,[me(e.timeToSampleTable.length),e.timeToSampleTable.map(t=>[me(t.sampleCount),me(t.sampleDelta)])]),Ul=e=>{if(e.samples.every(i=>i.type==="key"))return null;const t=[...e.samples.entries()].filter(([,i])=>i.type==="key");return Ye("stss",0,0,[me(t.length),t.map(([i])=>me(i+1))])},Al=e=>Ye("stsc",0,0,[me(e.compactlyCodedChunkTable.length),e.compactlyCodedChunkTable.map(t=>[me(t.firstChunk),me(t.samplesPerChunk),me(1)])]),zl=e=>{if(e.type==="audio"&&e.info.requiresPcmTransformation){const{sampleSize:t}=D0(e.track.source._codec);return Ye("stsz",0,0,[me(t*e.info.numberOfChannels),me(e.samples.reduce((i,n)=>i+tt(n.duration,e.timescale),0))])}return Ye("stsz",0,0,[me(0),me(e.samples.length),e.samples.map(t=>me(t.size))])},Ol=e=>e.finalizedChunks.length>0&&Y0(e.finalizedChunks).offset>=2**32?Ye("co64",0,0,[me(e.finalizedChunks.length),e.finalizedChunks.map(t=>V0(t.offset))]):Ye("stco",0,0,[me(e.finalizedChunks.length),e.finalizedChunks.map(t=>me(t.offset))]),jl=e=>Ye("ctts",1,0,[me(e.compositionTimeOffsetTable.length),e.compositionTimeOffsetTable.map(t=>[me(t.sampleCount),d0(t.sampleCompositionTimeOffset)])]),Ql=e=>{let t=1/0,i=-1/0,n=1/0,d=-1/0;ve(e.compositionTimeOffsetTable.length>0),ve(e.samples.length>0);for(let u=0;u<e.compositionTimeOffsetTable.length;u++){const h=e.compositionTimeOffsetTable[u];t=Math.min(t,h.sampleCompositionTimeOffset),i=Math.max(i,h.sampleCompositionTimeOffset)}for(let u=0;u<e.samples.length;u++){const h=e.samples[u];n=Math.min(n,tt(h.timestamp,e.timescale)),d=Math.max(d,tt(h.timestamp+h.duration,e.timescale))}const o=Math.max(-t,0);return d>=2**31?null:Ye("cslg",0,0,[d0(o),d0(t),d0(i),d0(n),d0(d)])},Dl=e=>Se("mvex",void 0,e.map($l)),$l=e=>Ye("trex",0,0,[me(e.track.id),me(1),me(0),me(0),me(0)]),Us=(e,t)=>Se("moof",void 0,[ql(e),...t.map(e1)]),ql=e=>Ye("mfhd",0,0,[me(e)]),Rn=e=>{let t=0,i=0;const n=0,d=0,o=e.type==="delta";return i|=+o,o?t|=1:t|=2,t<<24|i<<16|n<<8|d},e1=e=>Se("traf",void 0,[t1(e),i1(e),s1(e)]),t1=e=>{ve(e.currentChunk);let t=0;t|=8,t|=16,t|=32,t|=131072;const i=e.currentChunk.samples[1]??e.currentChunk.samples[0],n={duration:i.timescaleUnitsToNextSample,size:i.size,flags:Rn(i)};return Ye("tfhd",0,t,[me(e.track.id),me(n.duration),me(n.size),me(n.flags)])},i1=e=>(ve(e.currentChunk),Ye("tfdt",1,0,[V0(tt(e.currentChunk.startTimestamp,e.timescale))])),s1=e=>{ve(e.currentChunk);const t=e.currentChunk.samples.map(J=>J.timescaleUnitsToNextSample),i=e.currentChunk.samples.map(J=>J.size),n=e.currentChunk.samples.map(Rn),d=e.currentChunk.samples.map(J=>tt(J.timestamp-J.decodeTimestamp,e.timescale)),o=new Set(t),u=new Set(i),h=new Set(n),S=new Set(d),W=h.size===2&&n[0]!==n[1],I=o.size>1,Z=u.size>1,j=!W&&h.size>1,w=S.size>1||[...S].some(J=>J!==0);let A=0;return A|=1,A|=4*+W,A|=256*+I,A|=512*+Z,A|=1024*+j,A|=2048*+w,Ye("trun",1,A,[me(e.currentChunk.samples.length),me(e.currentChunk.offset-e.currentChunk.moofOffset||0),W?me(n[0]):[],e.currentChunk.samples.map((J,P)=>[I?me(t[P]):[],Z?me(i[P]):[],j?me(n[P]):[],w?d0(d[P]):[]])])},n1=e=>Se("mfra",void 0,[...e.map(r1),a1()]),r1=(e,t)=>Ye("tfra",1,0,[me(e.track.id),me(63),me(e.finalizedChunks.length),e.finalizedChunks.map(n=>[V0(tt(n.samples[0].timestamp,e.timescale)),V0(n.moofOffset),me(t+1),me(1),me(1)])]),a1=()=>Ye("mfro",0,0,[me(0)]),l1=()=>Se("vtte"),o1=(e,t,i,n,d)=>Se("vttc",void 0,[d!==null?Se("vsid",[d0(d)]):null,i!==null?Se("iden",[...$t.encode(i)]):null,t!==null?Se("ctim",[...$t.encode(ul(t))]):null,n!==null?Se("sttg",[...$t.encode(n)]):null,Se("payl",[...$t.encode(e)])]),c1=e=>Se("vtta",[...$t.encode(e)]),d1=e=>{const t=[],i=e.format._options.metadataFormat??"auto",n=e.output._metadataTags;if(i==="mdir"||i==="auto"&&!e.isQuickTime){const d=u1(n);d&&t.push(d)}else if(i==="mdta"){const d=h1(n);d&&t.push(d)}else(i==="udta"||i==="auto"&&e.isQuickTime)&&m1(t,e.output._metadataTags);return t.length===0?null:Se("udta",void 0,t)},m1=(e,t)=>{for(const{key:i,value:n}of fn(t))switch(i){case"title":e.push(Qt("©nam",n));break;case"description":e.push(Qt("©des",n));break;case"artist":e.push(Qt("©ART",n));break;case"album":e.push(Qt("©alb",n));break;case"albumArtist":e.push(Qt("albr",n));break;case"genre":e.push(Qt("©gen",n));break;case"date":e.push(Qt("©day",n.toISOString().slice(0,10)));break;case"comment":e.push(Qt("©cmt",n));break;case"lyrics":e.push(Qt("©lyr",n));break;case"raw":break;case"discNumber":case"discsTotal":case"trackNumber":case"tracksTotal":case"images":break;default:yn(i)}if(t.raw)for(const i in t.raw){const n=t.raw[i];n==null||i.length!==4||e.some(d=>d.type===i)||(typeof n=="string"?e.push(Qt(i,n)):n instanceof Uint8Array&&e.push(Se(i,Array.from(n))))}},Qt=(e,t)=>{const i=$t.encode(t);return Se(e,[Ge(i.length),Ge(Ln("und")),Array.from(i)])},As={"image/jpeg":13,"image/png":14,"image/bmp":27},Tn=(e,t)=>{const i=[];for(const{key:n,value:d}of fn(e))switch(n){case"title":i.push({key:t?"title":"©nam",value:Pt(d)});break;case"description":i.push({key:t?"description":"©des",value:Pt(d)});break;case"artist":i.push({key:t?"artist":"©ART",value:Pt(d)});break;case"album":i.push({key:t?"album":"©alb",value:Pt(d)});break;case"albumArtist":i.push({key:t?"album_artist":"aART",value:Pt(d)});break;case"comment":i.push({key:t?"comment":"©cmt",value:Pt(d)});break;case"genre":i.push({key:t?"genre":"©gen",value:Pt(d)});break;case"lyrics":i.push({key:t?"lyrics":"©lyr",value:Pt(d)});break;case"date":i.push({key:t?"date":"©day",value:Pt(d.toISOString().slice(0,10))});break;case"images":for(const o of d)o.kind==="coverFront"&&i.push({key:"covr",value:Se("data",[me(As[o.mimeType]??0),me(0),Array.from(o.data)])});break;case"trackNumber":if(t){const o=e.tracksTotal!==void 0?`${d}/${e.tracksTotal}`:d.toString();i.push({key:"track",value:Pt(o)})}else i.push({key:"trkn",value:Se("data",[me(0),me(0),Ge(0),Ge(d),Ge(e.tracksTotal??0),Ge(0)])});break;case"discNumber":t||i.push({key:"disc",value:Se("data",[me(0),me(0),Ge(0),Ge(d),Ge(e.discsTotal??0),Ge(0)])});break;case"tracksTotal":case"discsTotal":break;case"raw":break;default:yn(n)}if(e.raw)for(const n in e.raw){const d=e.raw[n];d==null||!t&&n.length!==4||i.some(o=>o.key===n)||(typeof d=="string"?i.push({key:n,value:Pt(d)}):d instanceof Uint8Array?i.push({key:n,value:Se("data",[me(0),me(0),Array.from(d)])}):d instanceof Zn&&i.push({key:n,value:Se("data",[me(As[d.mimeType]??0),me(0),Array.from(d.data)])}))}return i},u1=e=>{const t=Tn(e,!1);return t.length===0?null:Ye("meta",0,0,void 0,[ns(!1,"mdir","","appl"),Se("ilst",void 0,t.map(i=>Se(i.key,void 0,[i.value])))])},h1=e=>{const t=Tn(e,!0);return t.length===0?null:Se("meta",void 0,[ns(!1,"mdta",""),Ye("keys",0,0,[me(t.length)],t.map(i=>Se("mdta",[...$t.encode(i.key)]))),Se("ilst",void 0,t.map((i,n)=>{const d=String.fromCharCode(...me(n+1));return Se(d,void 0,[i.value])}))])},Pt=e=>Se("data",[me(1),me(0),...$t.encode(e)]),b1=(e,t)=>{switch(e){case"avc":return t.startsWith("avc3")?"avc3":"avc1";case"hevc":return"hvc1";case"vp8":return"vp08";case"vp9":return"vp09";case"av1":return"av01"}},p1={avc:Kl,hevc:Ml,vp8:Ps,vp9:Ps,av1:kl},Wn=(e,t)=>{switch(e){case"aac":return"mp4a";case"mp3":return"mp4a";case"opus":return"Opus";case"vorbis":return"mp4a";case"flac":return"fLaC";case"ulaw":return"ulaw";case"alaw":return"alaw";case"pcm-u8":return"raw ";case"pcm-s8":return"sowt"}if(t)switch(e){case"pcm-s16":return"sowt";case"pcm-s16be":return"twos";case"pcm-s24":return"in24";case"pcm-s24be":return"in24";case"pcm-s32":return"in32";case"pcm-s32be":return"in32";case"pcm-f32":return"fl32";case"pcm-f32be":return"fl32";case"pcm-f64":return"fl64";case"pcm-f64be":return"fl64"}else switch(e){case"pcm-s16":return"ipcm";case"pcm-s16be":return"ipcm";case"pcm-s24":return"ipcm";case"pcm-s24be":return"ipcm";case"pcm-s32":return"ipcm";case"pcm-s32be":return"ipcm";case"pcm-f32":return"fpcm";case"pcm-f32be":return"fpcm";case"pcm-f64":return"fpcm";case"pcm-f64be":return"fpcm"}},y1=(e,t)=>{switch(e){case"aac":return Ni;case"mp3":return Ni;case"opus":return Fl;case"vorbis":return Ni;case"flac":return Jl}if(t)switch(e){case"pcm-s24":return c0;case"pcm-s24be":return c0;case"pcm-s32":return c0;case"pcm-s32be":return c0;case"pcm-f32":return c0;case"pcm-f32be":return c0;case"pcm-f64":return c0;case"pcm-f64be":return c0}else switch(e){case"pcm-s16":return jt;case"pcm-s16be":return jt;case"pcm-s24":return jt;case"pcm-s24be":return jt;case"pcm-s32":return jt;case"pcm-s32be":return jt;case"pcm-f32":return jt;case"pcm-f32be":return jt;case"pcm-f64":return jt;case"pcm-f64be":return jt}return null},f1={webvtt:"wvtt"},Z1={webvtt:Nl},Ln=e=>{ve(e.length===3);let t=0;for(let i=0;i<3;i++)t<<=5,t+=e.charCodeAt(i)-96;return t};/*!
340
+ * Copyright (c) 2025-present, Vanilagy and contributors
341
+ *
342
+ * This Source Code Form is subject to the terms of the Mozilla Public
343
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
344
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/.
345
+ */class X1{constructor(){this.ensureMonotonicity=!1,this.trackedWrites=null,this.trackedStart=-1,this.trackedEnd=-1}start(){}maybeTrackWrites(t){if(!this.trackedWrites)return;let i=this.getPos();if(i<this.trackedStart){if(i+t.byteLength<=this.trackedStart)return;t=t.subarray(this.trackedStart-i),i=0}const n=i+t.byteLength-this.trackedStart;let d=this.trackedWrites.byteLength;for(;d<n;)d*=2;if(d!==this.trackedWrites.byteLength){const o=new Uint8Array(d);o.set(this.trackedWrites,0),this.trackedWrites=o}this.trackedWrites.set(t,i-this.trackedStart),this.trackedEnd=Math.max(this.trackedEnd,i+t.byteLength)}startTrackingWrites(){this.trackedWrites=new Uint8Array(2**10),this.trackedStart=this.getPos(),this.trackedEnd=this.trackedStart}stopTrackingWrites(){if(!this.trackedWrites)throw new Error("Internal error: Can't get tracked writes since nothing was tracked.");const i={data:this.trackedWrites.subarray(0,this.trackedEnd-this.trackedStart),start:this.trackedStart,end:this.trackedEnd};return this.trackedWrites=null,i}}const Pi=2**16,Ui=2**32;class xn extends X1{constructor(t){if(super(),this.pos=0,this.maxPos=0,this.target=t,this.supportsResize="resize"in new ArrayBuffer(0),this.supportsResize)try{this.buffer=new ArrayBuffer(Pi,{maxByteLength:Ui})}catch{this.buffer=new ArrayBuffer(Pi),this.supportsResize=!1}else this.buffer=new ArrayBuffer(Pi);this.bytes=new Uint8Array(this.buffer)}ensureSize(t){let i=this.buffer.byteLength;for(;i<t;)i*=2;if(i!==this.buffer.byteLength){if(i>Ui)throw new Error(`ArrayBuffer exceeded maximum size of ${Ui} bytes. Please consider using another target.`);if(this.supportsResize)this.buffer.resize(i);else{const n=new ArrayBuffer(i),d=new Uint8Array(n);d.set(this.bytes,0),this.buffer=n,this.bytes=d}}}write(t){var i,n;this.maybeTrackWrites(t),this.ensureSize(this.pos+t.byteLength),this.bytes.set(t,this.pos),(n=(i=this.target).onwrite)==null||n.call(i,this.pos,this.pos+t.byteLength),this.pos+=t.byteLength,this.maxPos=Math.max(this.maxPos,this.pos)}seek(t){this.pos=t}getPos(){return this.pos}async flush(){}async finalize(){this.ensureSize(this.pos),this.target.buffer=this.buffer.slice(0,Math.max(this.maxPos,this.pos))}async close(){}getSlice(t,i){return this.bytes.slice(t,i)}}/*!
346
+ * Copyright (c) 2025-present, Vanilagy and contributors
347
+ *
348
+ * This Source Code Form is subject to the terms of the Mozilla Public
349
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
350
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/.
351
+ */class Hn{constructor(){this._output=null,this.onwrite=null}}class Yn extends Hn{constructor(){super(...arguments),this.buffer=null}_createWriter(){return new xn(this)}}/*!
352
+ * Copyright (c) 2025-present, Vanilagy and contributors
353
+ *
354
+ * This Source Code Form is subject to the terms of the Mozilla Public
355
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
356
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/.
357
+ */const Qi=1e3,_1=2082844800,G1=e=>{const t={},i=e.track;return i.metadata.name!==void 0&&(t.name=i.metadata.name),t},tt=(e,t,i=!0)=>{const n=e*t;return i?Math.round(n):n};class S1 extends Da{constructor(t,i){super(t),this.auxTarget=new Yn,this.auxWriter=this.auxTarget._createWriter(),this.auxBoxWriter=new Ns(this.auxWriter),this.mdat=null,this.ftypSize=null,this.trackDatas=[],this.allTracksKnown=Ha(),this.creationTime=Math.floor(Date.now()/1e3)+_1,this.finalizedChunks=[],this.nextFragmentNumber=1,this.maxWrittenTimestamp=-1/0,this.format=i,this.writer=t._writer,this.boxWriter=new Ns(this.writer),this.isQuickTime=i instanceof kn;const n=this.writer instanceof xn?"in-memory":!1;this.fastStart=i._options.fastStart??n,this.isFragmented=this.fastStart==="fragmented",(this.fastStart==="in-memory"||this.isFragmented)&&(this.writer.ensureMonotonicity=!0),this.minimumFragmentDuration=i._options.minimumFragmentDuration??1}async start(){const t=await this.mutex.acquire(),i=this.output._tracks.some(n=>n.type==="video"&&n.source._codec==="avc");if(this.format._options.onFtyp&&this.writer.startTrackingWrites(),this.boxWriter.writeBox(hl({isQuickTime:this.isQuickTime,holdsAvc:i,fragmented:this.isFragmented})),this.format._options.onFtyp){const{data:n,start:d}=this.writer.stopTrackingWrites();this.format._options.onFtyp(n,d)}if(this.ftypSize=this.writer.getPos(),this.fastStart!=="in-memory")if(this.fastStart==="reserve"){for(const n of this.output._tracks)if(n.metadata.maximumPacketCount===void 0)throw new Error("All tracks must specify maximumPacketCount in their metadata when using fastStart: 'reserve'.")}else this.isFragmented||(this.format._options.onMdat&&this.writer.startTrackingWrites(),this.mdat=ci(!0),this.boxWriter.writeBox(this.mdat));await this.writer.flush(),t()}allTracksAreKnown(){for(const t of this.output._tracks)if(!t.source._closed&&!this.trackDatas.some(i=>i.track===t))return!1;return!0}async getMimeType(){await this.allTracksKnown.promise;const t=this.trackDatas.map(i=>i.type==="video"||i.type==="audio"?i.info.decoderConfig.codec:{webvtt:"wvtt"}[i.track.source._codec]);return ml({isQuickTime:this.isQuickTime,hasVideo:this.trackDatas.some(i=>i.type==="video"),hasAudio:this.trackDatas.some(i=>i.type==="audio"),codecStrings:t})}getVideoTrackData(t,i,n){const d=this.trackDatas.find(W=>W.track===t);if(d)return d;za(n),ve(n),ve(n.decoderConfig);const o={...n.decoderConfig};ve(o.codedWidth!==void 0),ve(o.codedHeight!==void 0);let u=!1;if(t.source._codec==="avc"&&!o.description){const W=qa(i.data);if(!W)throw new Error("Couldn't extract an AVCDecoderConfigurationRecord from the AVC packet. Make sure the packets are in Annex B format (as specified in ITU-T-REC-H.264) when not providing a description, or provide a description (must be an AVCDecoderConfigurationRecord as specified in ISO 14496-15) and ensure the packets are in AVCC format.");o.description=el(W),u=!0}else if(t.source._codec==="hevc"&&!o.description){const W=il(i.data);if(!W)throw new Error("Couldn't extract an HEVCDecoderConfigurationRecord from the HEVC packet. Make sure the packets are in Annex B format (as specified in ITU-T-REC-H.265) when not providing a description, or provide a description (must be an HEVCDecoderConfigurationRecord as specified in ISO 14496-15) and ensure the packets are in HEVC format.");o.description=cl(W),u=!0}const h=ka(1/(t.metadata.frameRate??57600),1e6).denominator,S={muxer:this,track:t,type:"video",info:{width:o.codedWidth,height:o.codedHeight,decoderConfig:o,requiresAnnexBTransformation:u},timescale:h,samples:[],sampleQueue:[],timestampProcessingQueue:[],timeToSampleTable:[],compositionTimeOffsetTable:[],lastTimescaleUnits:null,lastSample:null,finalizedChunks:[],currentChunk:null,compactlyCodedChunkTable:[]};return this.trackDatas.push(S),this.trackDatas.sort((W,I)=>W.track.id-I.track.id),this.allTracksAreKnown()&&this.allTracksKnown.resolve(),S}getAudioTrackData(t,i){const n=this.trackDatas.find(o=>o.track===t);if(n)return n;ja(i),ve(i),ve(i.decoderConfig);const d={muxer:this,track:t,type:"audio",info:{numberOfChannels:i.decoderConfig.numberOfChannels,sampleRate:i.decoderConfig.sampleRate,decoderConfig:i.decoderConfig,requiresPcmTransformation:!this.isFragmented&&k0.includes(t.source._codec)},timescale:i.decoderConfig.sampleRate,samples:[],sampleQueue:[],timestampProcessingQueue:[],timeToSampleTable:[],compositionTimeOffsetTable:[],lastTimescaleUnits:null,lastSample:null,finalizedChunks:[],currentChunk:null,compactlyCodedChunkTable:[]};return this.trackDatas.push(d),this.trackDatas.sort((o,u)=>o.track.id-u.track.id),this.allTracksAreKnown()&&this.allTracksKnown.resolve(),d}getSubtitleTrackData(t,i){const n=this.trackDatas.find(o=>o.track===t);if(n)return n;Qa(i),ve(i),ve(i.config);const d={muxer:this,track:t,type:"subtitle",info:{config:i.config},timescale:1e3,samples:[],sampleQueue:[],timestampProcessingQueue:[],timeToSampleTable:[],compositionTimeOffsetTable:[],lastTimescaleUnits:null,lastSample:null,finalizedChunks:[],currentChunk:null,compactlyCodedChunkTable:[],lastCueEndTimestamp:0,cueQueue:[],nextSourceId:0,cueToSourceId:new WeakMap};return this.trackDatas.push(d),this.trackDatas.sort((o,u)=>o.track.id-u.track.id),this.allTracksAreKnown()&&this.allTracksKnown.resolve(),d}async addEncodedVideoPacket(t,i,n){const d=await this.mutex.acquire();try{const o=this.getVideoTrackData(t,i,n);let u=i.data;if(o.info.requiresAnnexBTransformation){const W=is(u);if(W.length===0)throw new Error("Failed to transform packet data. Make sure all packets are provided in Annex B format, as specified in ITU-T-REC-H.264 and ITU-T-REC-H.265.");u=$a(W,4)}const h=this.validateAndNormalizeTimestamp(o.track,i.timestamp,i.type==="key"),S=this.createSampleForTrack(o,u,h,i.duration,i.type);await this.registerSample(o,S)}finally{d()}}async addEncodedAudioPacket(t,i,n){const d=await this.mutex.acquire();try{const o=this.getAudioTrackData(t,n),u=this.validateAndNormalizeTimestamp(o.track,i.timestamp,i.type==="key"),h=this.createSampleForTrack(o,i.data,u,i.duration,i.type);o.info.requiresPcmTransformation&&await this.maybePadWithSilence(o,u),await this.registerSample(o,h)}finally{d()}}async maybePadWithSilence(t,i){const n=Y0(t.samples),d=n?n.timestamp+n.duration:0,o=i-d,u=tt(o,t.timescale);if(u>0){const{sampleSize:h,silentValue:S}=D0(t.info.decoderConfig.codec),W=u*t.info.numberOfChannels,I=new Uint8Array(h*W).fill(S),Z=this.createSampleForTrack(t,new Uint8Array(I.buffer),d,o,"key");await this.registerSample(t,Z)}}async addSubtitleCue(t,i,n){const d=await this.mutex.acquire();try{const o=this.getSubtitleTrackData(t,n);this.validateAndNormalizeTimestamp(o.track,i.timestamp,!0),t.source._codec==="webvtt"&&(o.cueQueue.push(i),await this.processWebVTTCues(o,i.timestamp))}finally{d()}}async processWebVTTCues(t,i){for(;t.cueQueue.length>0;){const n=new Set([]);for(const W of t.cueQueue)ve(W.timestamp<=i),ve(t.lastCueEndTimestamp<=W.timestamp+W.duration),n.add(Math.max(W.timestamp,t.lastCueEndTimestamp)),n.add(W.timestamp+W.duration);const d=[...n].sort((W,I)=>W-I),o=d[0],u=d[1]??o;if(i<u)break;if(t.lastCueEndTimestamp<o){this.auxWriter.seek(0);const W=l1();this.auxBoxWriter.writeBox(W);const I=this.auxWriter.getSlice(0,this.auxWriter.getPos()),Z=this.createSampleForTrack(t,I,t.lastCueEndTimestamp,o-t.lastCueEndTimestamp,"key");await this.registerSample(t,Z),t.lastCueEndTimestamp=o}this.auxWriter.seek(0);for(let W=0;W<t.cueQueue.length;W++){const I=t.cueQueue[W];if(I.timestamp>=u)break;Es.lastIndex=0;const Z=Es.test(I.text),j=I.timestamp+I.duration;let w=t.cueToSourceId.get(I);if(w===void 0&&u<j&&(w=t.nextSourceId++,t.cueToSourceId.set(I,w)),I.notes){const J=c1(I.notes);this.auxBoxWriter.writeBox(J)}const A=o1(I.text,Z?o:null,I.identifier??null,I.settings??null,w??null);this.auxBoxWriter.writeBox(A),j===u&&t.cueQueue.splice(W--,1)}const h=this.auxWriter.getSlice(0,this.auxWriter.getPos()),S=this.createSampleForTrack(t,h,o,u-o,"key");await this.registerSample(t,S),t.lastCueEndTimestamp=u}}createSampleForTrack(t,i,n,d,o){return{timestamp:n,decodeTimestamp:n,duration:d,data:i,size:i.byteLength,type:o,timescaleUnitsToNextSample:tt(d,t.timescale)}}processTimestamps(t,i){if(t.timestampProcessingQueue.length===0)return;if(t.type==="audio"&&t.info.requiresPcmTransformation){let d=0;for(let o=0;o<t.timestampProcessingQueue.length;o++){const u=t.timestampProcessingQueue[o],h=tt(u.duration,t.timescale);d+=h}if(t.timeToSampleTable.length===0)t.timeToSampleTable.push({sampleCount:d,sampleDelta:1});else{const o=Y0(t.timeToSampleTable);o.sampleCount+=d}t.timestampProcessingQueue.length=0;return}const n=t.timestampProcessingQueue.map(d=>d.timestamp).sort((d,o)=>d-o);for(let d=0;d<t.timestampProcessingQueue.length;d++){const o=t.timestampProcessingQueue[d];o.decodeTimestamp=n[d],!this.isFragmented&&t.lastTimescaleUnits===null&&(o.decodeTimestamp=0);const u=tt(o.timestamp-o.decodeTimestamp,t.timescale),h=tt(o.duration,t.timescale);if(t.lastTimescaleUnits!==null){ve(t.lastSample);const S=tt(o.decodeTimestamp,t.timescale,!1),W=Math.round(S-t.lastTimescaleUnits);if(ve(W>=0),t.lastTimescaleUnits+=W,t.lastSample.timescaleUnitsToNextSample=W,!this.isFragmented){let I=Y0(t.timeToSampleTable);if(ve(I),I.sampleCount===1){I.sampleDelta=W;const j=t.timeToSampleTable[t.timeToSampleTable.length-2];j&&j.sampleDelta===W&&(j.sampleCount++,t.timeToSampleTable.pop(),I=j)}else I.sampleDelta!==W&&(I.sampleCount--,t.timeToSampleTable.push(I={sampleCount:1,sampleDelta:W}));I.sampleDelta===h?I.sampleCount++:t.timeToSampleTable.push({sampleCount:1,sampleDelta:h});const Z=Y0(t.compositionTimeOffsetTable);ve(Z),Z.sampleCompositionTimeOffset===u?Z.sampleCount++:t.compositionTimeOffsetTable.push({sampleCount:1,sampleCompositionTimeOffset:u})}}else t.lastTimescaleUnits=tt(o.decodeTimestamp,t.timescale,!1),this.isFragmented||(t.timeToSampleTable.push({sampleCount:1,sampleDelta:h}),t.compositionTimeOffsetTable.push({sampleCount:1,sampleCompositionTimeOffset:u}));t.lastSample=o}if(t.timestampProcessingQueue.length=0,ve(t.lastSample),ve(t.lastTimescaleUnits!==null),i!==void 0&&t.lastSample.timescaleUnitsToNextSample===0){ve(i.type==="key");const d=tt(i.timestamp,t.timescale,!1),o=Math.round(d-t.lastTimescaleUnits);t.lastSample.timescaleUnitsToNextSample=o}}async registerSample(t,i){i.type==="key"&&this.processTimestamps(t,i),t.timestampProcessingQueue.push(i),this.isFragmented?(t.sampleQueue.push(i),await this.interleaveSamples()):this.fastStart==="reserve"?await this.registerSampleFastStartReserve(t,i):await this.addSampleToTrack(t,i)}async addSampleToTrack(t,i){if(!this.isFragmented&&(t.samples.push(i),this.fastStart==="reserve")){const d=t.track.metadata.maximumPacketCount;if(ve(d!==void 0),t.samples.length>d)throw new Error(`Track #${t.track.id} has already reached the maximum packet count (${d}). Either add less packets or increase the maximum packet count.`)}let n=!1;if(!t.currentChunk)n=!0;else{t.currentChunk.startTimestamp=Math.min(t.currentChunk.startTimestamp,i.timestamp);const d=i.timestamp-t.currentChunk.startTimestamp;if(this.isFragmented){const o=this.trackDatas.every(u=>{if(t===u)return i.type==="key";const h=u.sampleQueue[0];return h?h.type==="key":u.track.source._closed});d>=this.minimumFragmentDuration&&o&&i.timestamp>this.maxWrittenTimestamp&&(n=!0,await this.finalizeFragment())}else n=d>=.5}n&&(t.currentChunk&&await this.finalizeCurrentChunk(t),t.currentChunk={startTimestamp:i.timestamp,samples:[],offset:null,moofOffset:null}),ve(t.currentChunk),t.currentChunk.samples.push(i),this.isFragmented&&(this.maxWrittenTimestamp=Math.max(this.maxWrittenTimestamp,i.timestamp))}async finalizeCurrentChunk(t){if(ve(!this.isFragmented),!t.currentChunk)return;t.finalizedChunks.push(t.currentChunk),this.finalizedChunks.push(t.currentChunk);let i=t.currentChunk.samples.length;if(t.type==="audio"&&t.info.requiresPcmTransformation&&(i=t.currentChunk.samples.reduce((n,d)=>n+tt(d.duration,t.timescale),0)),(t.compactlyCodedChunkTable.length===0||Y0(t.compactlyCodedChunkTable).samplesPerChunk!==i)&&t.compactlyCodedChunkTable.push({firstChunk:t.finalizedChunks.length,samplesPerChunk:i}),this.fastStart==="in-memory"){t.currentChunk.offset=0;return}t.currentChunk.offset=this.writer.getPos();for(const n of t.currentChunk.samples)ve(n.data),this.writer.write(n.data),n.data=null;await this.writer.flush()}async interleaveSamples(t=!1){if(ve(this.isFragmented),!(!t&&!this.allTracksAreKnown()))e:for(;;){let i=null,n=1/0;for(const o of this.trackDatas){if(!t&&o.sampleQueue.length===0&&!o.track.source._closed)break e;o.sampleQueue.length>0&&o.sampleQueue[0].timestamp<n&&(i=o,n=o.sampleQueue[0].timestamp)}if(!i)break;const d=i.sampleQueue.shift();await this.addSampleToTrack(i,d)}}async finalizeFragment(t=!0){ve(this.isFragmented);const i=this.nextFragmentNumber++;if(i===1){this.format._options.onMoov&&this.writer.startTrackingWrites();const w=U0(this);if(this.boxWriter.writeBox(w),this.format._options.onMoov){const{data:A,start:J}=this.writer.stopTrackingWrites();this.format._options.onMoov(A,J)}}const n=this.trackDatas.filter(w=>w.currentChunk),d=Us(i,n),o=this.writer.getPos(),u=o+this.boxWriter.measureBox(d);let h=u+Fi,S=1/0;for(const w of n){w.currentChunk.offset=h,w.currentChunk.moofOffset=o;for(const A of w.currentChunk.samples)h+=A.size;S=Math.min(S,w.currentChunk.startTimestamp)}const W=h-u,I=W>=2**32;if(I)for(const w of n)w.currentChunk.offset+=Js-Fi;this.format._options.onMoof&&this.writer.startTrackingWrites();const Z=Us(i,n);if(this.boxWriter.writeBox(Z),this.format._options.onMoof){const{data:w,start:A}=this.writer.stopTrackingWrites();this.format._options.onMoof(w,A,S)}ve(this.writer.getPos()===u),this.format._options.onMdat&&this.writer.startTrackingWrites();const j=ci(I);j.size=W,this.boxWriter.writeBox(j),this.writer.seek(u+(I?Js:Fi));for(const w of n)for(const A of w.currentChunk.samples)this.writer.write(A.data),A.data=null;if(this.format._options.onMdat){const{data:w,start:A}=this.writer.stopTrackingWrites();this.format._options.onMdat(w,A)}for(const w of n)w.finalizedChunks.push(w.currentChunk),this.finalizedChunks.push(w.currentChunk),w.currentChunk=null;t&&await this.writer.flush()}async registerSampleFastStartReserve(t,i){if(this.allTracksAreKnown()){if(!this.mdat){const n=U0(this),o=this.boxWriter.measureBox(n)+this.computeSampleTableSizeUpperBound()+4096;ve(this.ftypSize!==null),this.writer.seek(this.ftypSize+o),this.format._options.onMdat&&this.writer.startTrackingWrites(),this.mdat=ci(!0),this.boxWriter.writeBox(this.mdat);for(const u of this.trackDatas){for(const h of u.sampleQueue)await this.addSampleToTrack(u,h);u.sampleQueue.length=0}}await this.addSampleToTrack(t,i)}else t.sampleQueue.push(i)}computeSampleTableSizeUpperBound(){ve(this.fastStart==="reserve");let t=0;for(const i of this.trackDatas){const n=i.track.metadata.maximumPacketCount;ve(n!==void 0),t+=8*Math.ceil(2/3*n),t+=4*n,t+=8*Math.ceil(2/3*n),t+=12*Math.ceil(2/3*n),t+=4*n,t+=8*n}return t}async onTrackClose(t){const i=await this.mutex.acquire();if(t.type==="subtitle"&&t.source._codec==="webvtt"){const n=this.trackDatas.find(d=>d.track===t);n&&await this.processWebVTTCues(n,1/0)}this.allTracksAreKnown()&&this.allTracksKnown.resolve(),this.isFragmented&&await this.interleaveSamples(),i()}async finalize(){const t=await this.mutex.acquire();this.allTracksKnown.resolve();for(const i of this.trackDatas)i.type==="subtitle"&&i.track.source._codec==="webvtt"&&await this.processWebVTTCues(i,1/0);if(this.isFragmented){await this.interleaveSamples(!0);for(const i of this.trackDatas)this.processTimestamps(i);await this.finalizeFragment(!1)}else for(const i of this.trackDatas)this.processTimestamps(i),await this.finalizeCurrentChunk(i);if(this.fastStart==="in-memory"){this.mdat=ci(!1);let i;for(let d=0;d<2;d++){const o=U0(this),u=this.boxWriter.measureBox(o);i=this.boxWriter.measureBox(this.mdat);let h=this.writer.getPos()+u+i;for(const S of this.finalizedChunks){S.offset=h;for(const{data:W}of S.samples)ve(W),h+=W.byteLength,i+=W.byteLength}if(h<2**32)break;i>=2**32&&(this.mdat.largeSize=!0)}this.format._options.onMoov&&this.writer.startTrackingWrites();const n=U0(this);if(this.boxWriter.writeBox(n),this.format._options.onMoov){const{data:d,start:o}=this.writer.stopTrackingWrites();this.format._options.onMoov(d,o)}this.format._options.onMdat&&this.writer.startTrackingWrites(),this.mdat.size=i,this.boxWriter.writeBox(this.mdat);for(const d of this.finalizedChunks)for(const o of d.samples)ve(o.data),this.writer.write(o.data),o.data=null;if(this.format._options.onMdat){const{data:d,start:o}=this.writer.stopTrackingWrites();this.format._options.onMdat(d,o)}}else if(this.isFragmented){const i=this.writer.getPos(),n=n1(this.trackDatas);this.boxWriter.writeBox(n);const d=this.writer.getPos()-i;this.writer.seek(this.writer.getPos()-4),this.boxWriter.writeU32(d)}else{ve(this.mdat);const i=this.boxWriter.offsets.get(this.mdat);ve(i!==void 0);const n=this.writer.getPos()-i;if(this.mdat.size=n,this.mdat.largeSize=n>=2**32,this.boxWriter.patchBox(this.mdat),this.format._options.onMdat){const{data:o,start:u}=this.writer.stopTrackingWrites();this.format._options.onMdat(o,u)}const d=U0(this);if(this.fastStart==="reserve"){ve(this.ftypSize!==null),this.writer.seek(this.ftypSize),this.format._options.onMoov&&this.writer.startTrackingWrites(),this.boxWriter.writeBox(d);const o=this.boxWriter.offsets.get(this.mdat)-this.writer.getPos();this.boxWriter.writeBox(bl(o))}else this.format._options.onMoov&&this.writer.startTrackingWrites(),this.boxWriter.writeBox(d);if(this.format._options.onMoov){const{data:o,start:u}=this.writer.stopTrackingWrites();this.format._options.onMoov(o,u)}}t()}}/*!
358
+ * Copyright (c) 2025-present, Vanilagy and contributors
359
+ *
360
+ * This Source Code Form is subject to the terms of the Mozilla Public
361
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
362
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/.
363
+ */class wn{getSupportedVideoCodecs(){return this.getSupportedCodecs().filter(t=>O0.includes(t))}getSupportedAudioCodecs(){return this.getSupportedCodecs().filter(t=>ui.includes(t))}getSupportedSubtitleCodecs(){return this.getSupportedCodecs().filter(t=>hi.includes(t))}_codecUnsupportedHint(t){return""}}class Kn extends wn{constructor(t={}){if(!t||typeof t!="object")throw new TypeError("options must be an object.");if(t.fastStart!==void 0&&![!1,"in-memory","reserve","fragmented"].includes(t.fastStart))throw new TypeError("options.fastStart, when provided, must be false, 'in-memory', 'reserve', or 'fragmented'.");if(t.minimumFragmentDuration!==void 0&&(!Number.isFinite(t.minimumFragmentDuration)||t.minimumFragmentDuration<0))throw new TypeError("options.minimumFragmentDuration, when provided, must be a non-negative number.");if(t.onFtyp!==void 0&&typeof t.onFtyp!="function")throw new TypeError("options.onFtyp, when provided, must be a function.");if(t.onMoov!==void 0&&typeof t.onMoov!="function")throw new TypeError("options.onMoov, when provided, must be a function.");if(t.onMdat!==void 0&&typeof t.onMdat!="function")throw new TypeError("options.onMdat, when provided, must be a function.");if(t.onMoof!==void 0&&typeof t.onMoof!="function")throw new TypeError("options.onMoof, when provided, must be a function.");if(t.metadataFormat!==void 0&&!["mdir","mdta","udta","auto"].includes(t.metadataFormat))throw new TypeError("options.metadataFormat, when provided, must be either 'auto', 'mdir', 'mdta', or 'udta'.");super(),this._options=t}getSupportedTrackCounts(){return{video:{min:0,max:1/0},audio:{min:0,max:1/0},subtitle:{min:0,max:1/0},total:{min:1,max:2**32-1}}}get supportsVideoRotationMetadata(){return!0}_createMuxer(t){return new S1(t,this)}}class Mn extends Kn{constructor(t){super(t)}get _name(){return"MP4"}get fileExtension(){return".mp4"}get mimeType(){return"video/mp4"}getSupportedCodecs(){return[...O0,...Xn,"pcm-s16","pcm-s16be","pcm-s24","pcm-s24be","pcm-s32","pcm-s32be","pcm-f32","pcm-f32be","pcm-f64","pcm-f64be",...hi]}_codecUnsupportedHint(t){return new kn().getSupportedCodecs().includes(t)?" Switching to MOV will grant support for this codec.":""}}class kn extends Kn{constructor(t){super(t)}get _name(){return"MOV"}get fileExtension(){return".mov"}get mimeType(){return"video/quicktime"}getSupportedCodecs(){return[...O0,...ui]}_codecUnsupportedHint(t){return new Mn().getSupportedCodecs().includes(t)?" Switching to MP4 will grant support for this codec.":""}}/*!
364
+ * Copyright (c) 2025-present, Vanilagy and contributors
365
+ *
366
+ * This Source Code Form is subject to the terms of the Mozilla Public
367
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
368
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/.
369
+ */class rs{constructor(){this._connectedTrack=null,this._closingPromise=null,this._closed=!1,this._timestampOffset=0}_ensureValidAdd(){if(!this._connectedTrack)throw new Error("Source is not connected to an output track.");if(this._connectedTrack.output.state==="canceled")throw new Error("Output has been canceled.");if(this._connectedTrack.output.state==="finalizing"||this._connectedTrack.output.state==="finalized")throw new Error("Output has been finalized.");if(this._connectedTrack.output.state==="pending")throw new Error("Output has not started.");if(this._closed)throw new Error("Source is closed.")}async _start(){}async _flushAndClose(t){}close(){if(this._closingPromise)return;const t=this._connectedTrack;if(!t)throw new Error("Cannot call close without connecting the source to an output track.");if(t.output.state==="pending")throw new Error("Cannot call close before output has been started.");this._closingPromise=(async()=>{await this._flushAndClose(!1),this._closed=!0,!(t.output.state==="finalizing"||t.output.state==="finalized")&&t.output._muxer.onTrackClose(t)})()}async _flushOrWaitForOngoingClose(t){return this._closingPromise?this._closingPromise:this._flushAndClose(t)}}class Bn extends rs{constructor(t){if(super(),this._connectedTrack=null,!O0.includes(t))throw new TypeError(`Invalid video codec '${t}'. Must be one of: ${O0.join(", ")}.`);this._codec=t}}class v1 extends Bn{constructor(t){super(t)}add(t,i){if(!(t instanceof B0))throw new TypeError("packet must be an EncodedPacket.");if(t.isMetadataOnly)throw new TypeError("Metadata-only packets cannot be added.");if(i!==void 0&&(!i||typeof i!="object"))throw new TypeError("meta, when provided, must be an object.");return this._ensureValidAdd(),this._connectedTrack.output._muxer.addEncodedVideoPacket(this._connectedTrack,t,i)}}class Cn extends rs{constructor(t){if(super(),this._connectedTrack=null,!ui.includes(t))throw new TypeError(`Invalid audio codec '${t}'. Must be one of: ${ui.join(", ")}.`);this._codec=t}}class I1 extends Cn{constructor(t){super(t)}add(t,i){if(!(t instanceof B0))throw new TypeError("packet must be an EncodedPacket.");if(t.isMetadataOnly)throw new TypeError("Metadata-only packets cannot be added.");if(i!==void 0&&(!i||typeof i!="object"))throw new TypeError("meta, when provided, must be an object.");return this._ensureValidAdd(),this._connectedTrack.output._muxer.addEncodedAudioPacket(this._connectedTrack,t,i)}}class V1 extends rs{constructor(t){if(super(),this._connectedTrack=null,!hi.includes(t))throw new TypeError(`Invalid subtitle codec '${t}'. Must be one of: ${hi.join(", ")}.`);this._codec=t}}/*!
370
+ * Copyright (c) 2025-present, Vanilagy and contributors
371
+ *
372
+ * This Source Code Form is subject to the terms of the Mozilla Public
373
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
374
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/.
375
+ */const R1=["video","audio","subtitle"],Ai=e=>{if(!e||typeof e!="object")throw new TypeError("metadata must be an object.");if(e.languageCode!==void 0&&!Ma(e.languageCode))throw new TypeError("metadata.languageCode, when provided, must be a three-letter, ISO 639-2/T language code.");if(e.name!==void 0&&typeof e.name!="string")throw new TypeError("metadata.name, when provided, must be a string.");if(e.disposition!==void 0&&ga(e.disposition),e.maximumPacketCount!==void 0&&(!Number.isInteger(e.maximumPacketCount)||e.maximumPacketCount<0))throw new TypeError("metadata.maximumPacketCount, when provided, must be a non-negative integer.")};class T1{constructor(t){if(this.state="pending",this._tracks=[],this._startPromise=null,this._cancelPromise=null,this._finalizePromise=null,this._mutex=new pn,this._metadataTags={},!t||typeof t!="object")throw new TypeError("options must be an object.");if(!(t.format instanceof wn))throw new TypeError("options.format must be an OutputFormat.");if(!(t.target instanceof Hn))throw new TypeError("options.target must be a Target.");if(t.target._output)throw new Error("Target is already used for another output.");t.target._output=this,this.format=t.format,this.target=t.target,this._writer=t.target._createWriter(),this._muxer=t.format._createMuxer(this)}addVideoTrack(t,i={}){if(!(t instanceof Bn))throw new TypeError("source must be a VideoSource.");if(Ai(i),i.rotation!==void 0&&![0,90,180,270].includes(i.rotation))throw new TypeError(`Invalid video rotation: ${i.rotation}. Has to be 0, 90, 180 or 270.`);if(!this.format.supportsVideoRotationMetadata&&i.rotation)throw new Error(`${this.format._name} does not support video rotation metadata.`);if(i.frameRate!==void 0&&(!Number.isFinite(i.frameRate)||i.frameRate<=0))throw new TypeError(`Invalid video frame rate: ${i.frameRate}. Must be a positive number.`);this._addTrack("video",t,i)}addAudioTrack(t,i={}){if(!(t instanceof Cn))throw new TypeError("source must be an AudioSource.");Ai(i),this._addTrack("audio",t,i)}addSubtitleTrack(t,i={}){if(!(t instanceof V1))throw new TypeError("source must be a SubtitleSource.");Ai(i),this._addTrack("subtitle",t,i)}setMetadataTags(t){if(Ca(t),this.state!=="pending")throw new Error("Cannot set metadata tags after output has been started or canceled.");this._metadataTags=t}_addTrack(t,i,n){if(this.state!=="pending")throw new Error("Cannot add track after output has been started or canceled.");if(i._connectedTrack)throw new Error("Source is already used for a track.");const d=this.format.getSupportedTrackCounts(),o=this._tracks.reduce((W,I)=>W+(I.type===t?1:0),0),u=d[t].max;if(o===u)throw new Error(u===0?`${this.format._name} does not support ${t} tracks.`:`${this.format._name} does not support more than ${u} ${t} track${u===1?"":"s"}.`);const h=d.total.max;if(this._tracks.length===h)throw new Error(`${this.format._name} does not support more than ${h} tracks${h===1?"":"s"} in total.`);const S={id:this._tracks.length+1,output:this,type:t,source:i,metadata:n};if(S.type==="video"){const W=this.format.getSupportedVideoCodecs();if(W.length===0)throw new Error(`${this.format._name} does not support video tracks.`+this.format._codecUnsupportedHint(S.source._codec));if(!W.includes(S.source._codec))throw new Error(`Codec '${S.source._codec}' cannot be contained within ${this.format._name}. Supported video codecs are: ${W.map(I=>`'${I}'`).join(", ")}.`+this.format._codecUnsupportedHint(S.source._codec))}else if(S.type==="audio"){const W=this.format.getSupportedAudioCodecs();if(W.length===0)throw new Error(`${this.format._name} does not support audio tracks.`+this.format._codecUnsupportedHint(S.source._codec));if(!W.includes(S.source._codec))throw new Error(`Codec '${S.source._codec}' cannot be contained within ${this.format._name}. Supported audio codecs are: ${W.map(I=>`'${I}'`).join(", ")}.`+this.format._codecUnsupportedHint(S.source._codec))}else if(S.type==="subtitle"){const W=this.format.getSupportedSubtitleCodecs();if(W.length===0)throw new Error(`${this.format._name} does not support subtitle tracks.`+this.format._codecUnsupportedHint(S.source._codec));if(!W.includes(S.source._codec))throw new Error(`Codec '${S.source._codec}' cannot be contained within ${this.format._name}. Supported subtitle codecs are: ${W.map(I=>`'${I}'`).join(", ")}.`+this.format._codecUnsupportedHint(S.source._codec))}this._tracks.push(S),i._connectedTrack=S}async start(){const t=this.format.getSupportedTrackCounts();for(const n of R1){const d=this._tracks.reduce((u,h)=>u+(h.type===n?1:0),0),o=t[n].min;if(d<o)throw new Error(o===t[n].max?`${this.format._name} requires exactly ${o} ${n} track${o===1?"":"s"}.`:`${this.format._name} requires at least ${o} ${n} track${o===1?"":"s"}.`)}const i=t.total.min;if(this._tracks.length<i)throw new Error(i===t.total.max?`${this.format._name} requires exactly ${i} track${i===1?"":"s"}.`:`${this.format._name} requires at least ${i} track${i===1?"":"s"}.`);if(this.state==="canceled")throw new Error("Output has been canceled.");return this._startPromise?(console.warn("Output has already been started."),this._startPromise):this._startPromise=(async()=>{this.state="started",this._writer.start();const n=await this._mutex.acquire();await this._muxer.start();const d=this._tracks.map(o=>o.source._start());await Promise.all(d),n()})()}getMimeType(){return this._muxer.getMimeType()}async cancel(){if(this._cancelPromise)return console.warn("Output has already been canceled."),this._cancelPromise;if(this.state==="finalizing"||this.state==="finalized"){console.warn("Output has already been finalized.");return}return this._cancelPromise=(async()=>{this.state="canceled";const t=await this._mutex.acquire(),i=this._tracks.map(n=>n.source._flushOrWaitForOngoingClose(!0));await Promise.all(i),await this._writer.close(),t()})()}async finalize(){if(this.state==="pending")throw new Error("Cannot finalize before starting.");if(this.state==="canceled")throw new Error("Cannot finalize after canceling.");return this._finalizePromise?(console.warn("Output has already been finalized."),this._finalizePromise):this._finalizePromise=(async()=>{this.state="finalizing";const t=await this._mutex.acquire(),i=this._tracks.map(n=>n.source._flushOrWaitForOngoingClose(!1));await Promise.all(i),await this._muxer.finalize(),await this._writer.flush(),await this._writer.finalize(),this.state="finalized",t()})()}}class W1{constructor(t){this.type=t||"video",this.target=new Yn;const i=new T1({format:new Mn,target:this.target});this.started=!1,this.output=i,this.source=this.type==="video"?new v1("avc"):new I1("aac"),this.output.addVideoTrack(this.source),console.warn("⚠️ Demo/Learning Function: This utility is intended for demos and learning purposes only. For production use, please use a proper muxing library like MediaBunny (https://mediabunny.dev/) ")}addChunk(t,i){this.started||(this.output.start(),this.started=!0),this.source.add(B0.fromEncodedChunk(t),i)}async finish(){return await this.output.finalize(),this.target.buffer}}exports.ExampleMuxer=W1;exports.GPUFrameRenderer=Nn;exports.MP3Decoder=da;exports.MP3Encoder=ca;exports.MP4Demuxer=Za;exports.demuxAudio=Ra;exports.demuxVideo=Ta;exports.extractChannels=zs;exports.getAudioChunks=Wa;exports.getBitrate=Jn;exports.getCodecString=En;exports.getVideoChunks=Va;